字符串a 中有特定字符“&”,个数未知;
现需要提取第一个"&"和第二个"&”之间的字符!
求解!!!
30 个解决方案
#1
split(a,“&”)(2)
另外还要考虑a里&的数量是不是大于等于2,不然会报异常。
另外还要考虑a里&的数量是不是大于等于2,不然会报异常。
#2
split(a,"&")(1),没睡好觉,数错了
#3
只要在字符串中有一个 & 字符就行了,不会报错。
用Spit来操作,比较简洁、方便。
但如果字符中较长、并且&字符比较多,用 Instr( )和Mid$( )这两个函数配合处理,运行效率高些。
不过如果“偶尔调用一次”,也关系不大。
#4
Public Function MidStr(ByVal Str As String, ByVal StartStr As String, ByVal EndStr As String, Optional ByVal Order As Integer = 0) As String
Dim L As Long, R As Long
L = InStr(Str, StartStr)
If L = 0 Then Exit Function
L = L + Len(StartStr)
If Order = 0 Then
R = InStr(L, Str, EndStr)
Else
R = InStrRev(Str, EndStr)
End If
If R < L Then Exit Function
MidStr = Mid(Str, L, R - L)
End Function
'=================================
Str="AAA&BBB&CCC&DDD"
MidStr Str,"&","&" '返回 BBB
MidStr Str,"&","&",1 '返回 BBB&CCC
#5
Dim strData As String, strSubString() As String
strData = "AAAA&myString&BBBBB"
strSubString = Split(strData, "&")
If UBound(strSubString) >= 1 Then
Debug.Print strSubString(1)
End If
#6
Dim strData As String, strSubString() As String
strData = "&BBBBB"
strSubString = Split(strData, "&")
If UBound(strSubString) >= 1 Then
Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
End If
小心驶得万年船
#7
这个有什么问题?
这方面的“问题”我在3楼中已经说过了。
如果必须是“两个&”,那么只要把条件中的 >=1 改成 >=2就行了。
当然也可以用Instr( )函数来判断一下字符串中是否至少有2个 &字符、并用Mid$( )函数截取出字符串。
#8
马后炮
#9
Talk is cheap, show me the code!
#10
万一第一个&和第二个&之间有4G个字符捏?!
不怕做不到;就怕想不到!!
各位领教了本ID“强词夺理”的优秀品质了吧。
不怕做不到;就怕想不到!!
各位领教了本ID“强词夺理”的优秀品质了吧。
#11
你不仅是强词夺理,还是“信口开河”的高手!
VB6是32位程序,理论上“最大内存地址空间容量”就只有4GB;
然而这“4GB地址空间”中,高2GB段默认是“系统保留空间”,这时最多“2GB空间”了;
即使通过更改配置参数,也最多能把“用户空间”扩展到3GB而已。
另外,“低64KB”是用户程序无法访问的,这样“理论极限可用地址空间容量”已经低于3GB了!
VB6中,每个字符要占用2字节,而“数据空间”最大范围还达不到3GB,算下来最多只能“1.5GB个字符”了,
你如何给我整得出“4GB个字符”来!!!
#12
边界条件不是每个人都能想全的。
#13
#14
但是你的代码也处理不了4G的内容呀,没看出来你的代码解决了什么别人没能解决问题?
#15
这种情况应该看作符合需求。
楼主所说的第一个 & 可看作起始标志,第二个 & 可看作结束标志。
BBBBB 显然是在起始标志之后。如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。
楼主所说的第一个 & 可看作起始标志,第二个 & 可看作结束标志。
BBBBB 显然是在起始标志之后。如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。
#16
UBound是个抽风型函数,返回值是-1的时候,有时候能返回,有时候报错
#17
我的代码不是纠正问题,是举出一个异常数据,暴露问题用的。
#18
“如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。”
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug
#19
假设有字符串a,长度未知;(a必须有长度限制,比如2..1073741824)
字符串a 中有特定字符“&”,个数未知;(&的个数必须有限制,比如2..1073741824)
现需要提取第一个"&"和第二个"&”之间的字符串!(两个&之间的每个字符必须合法)
还要确保字符串的编码是VB6默认的Unicode
……
字符串a 中有特定字符“&”,个数未知;(&的个数必须有限制,比如2..1073741824)
现需要提取第一个"&"和第二个"&”之间的字符串!(两个&之间的每个字符必须合法)
还要确保字符串的编码是VB6默认的Unicode
……
#20
一初学者问个问题,结果神仙打架
#21
我的标准答案都被无视了
#22
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
万一字符串不是unicode编码,你的“标答”估计也有bug
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
#23
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
Talk is cheap.
#24
“如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。”
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug
如果将这样的串作为正常输入提交,那么有两种可能的协议许可:
1 对于最后的串,可以用串的结束标志来替代专用的结束字符,即最后的结束字符可省略。
2 如果将第二个 & 看作与后续无关内容的分隔符,当在存在后续无关内容时,它可以省略。
当然了,对于有强迫症的开发者,另当别论。他可以在输入时在最后加上这个无用的 &。
#25
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
Talk is cheap.
比如HTML编码字符串:<&bug&>
#26
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
Talk is cheap.
比如HTML编码字符串:<&bug&>
好吧,你赢了。
#27
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
Talk is cheap.
比如HTML编码字符串:<&bug&>
在VB6中,字符串就是字符串,哪管它什么“xx代码、xx转义”什么的!
当“传入”字符串内容是 <&bug&>的时候,
难道你就觉得楼主需要的一定就是 "bug",而不是 lt; 么!!!
#28
总而言之,想写一段程序就满足未来无穷的需求变化,是不可能的。
#29
为毛要写万能代码,根据具体需求来不行么
#30
可能是我的问题描述不够准确 !
我需要处理的字符串为 数字、 英文字母、 / 、 - 、 & 混合的字符,长度也不会很长,所以"&"的数量 也不会太多!
最开始,我有用 类似 4 楼 bakw 的方法!!
但是我感觉代码不够简洁,
并且我的程序中 需要这样处理的地方只有一处,
故最后我采用了 2楼 Runnerchin 的方法!!
最后,还是非常感谢诸位的帮助!
#1
split(a,“&”)(2)
另外还要考虑a里&的数量是不是大于等于2,不然会报异常。
另外还要考虑a里&的数量是不是大于等于2,不然会报异常。
#2
split(a,"&")(1),没睡好觉,数错了
#3
split(a,"&")(1),没睡好觉,数错了
只要在字符串中有一个 & 字符就行了,不会报错。
用Spit来操作,比较简洁、方便。
但如果字符中较长、并且&字符比较多,用 Instr( )和Mid$( )这两个函数配合处理,运行效率高些。
不过如果“偶尔调用一次”,也关系不大。
#4
Public Function MidStr(ByVal Str As String, ByVal StartStr As String, ByVal EndStr As String, Optional ByVal Order As Integer = 0) As String
Dim L As Long, R As Long
L = InStr(Str, StartStr)
If L = 0 Then Exit Function
L = L + Len(StartStr)
If Order = 0 Then
R = InStr(L, Str, EndStr)
Else
R = InStrRev(Str, EndStr)
End If
If R < L Then Exit Function
MidStr = Mid(Str, L, R - L)
End Function
'=================================
Str="AAA&BBB&CCC&DDD"
MidStr Str,"&","&" '返回 BBB
MidStr Str,"&","&",1 '返回 BBB&CCC
#5
Dim strData As String, strSubString() As String
strData = "AAAA&myString&BBBBB"
strSubString = Split(strData, "&")
If UBound(strSubString) >= 1 Then
Debug.Print strSubString(1)
End If
#6
Dim strData As String, strSubString() As String
strData = "&BBBBB"
strSubString = Split(strData, "&")
If UBound(strSubString) >= 1 Then
Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
End If
小心驶得万年船
#7
Dim strData As String, strSubString() As String
strData = "&BBBBB"
strSubString = Split(strData, "&")
If UBound(strSubString) >= 1 Then
Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
End If
小心驶得万年船
这个有什么问题?
这方面的“问题”我在3楼中已经说过了。
如果必须是“两个&”,那么只要把条件中的 >=1 改成 >=2就行了。
当然也可以用Instr( )函数来判断一下字符串中是否至少有2个 &字符、并用Mid$( )函数截取出字符串。
#8
马后炮
#9
Talk is cheap, show me the code!
#10
万一第一个&和第二个&之间有4G个字符捏?!
不怕做不到;就怕想不到!!
各位领教了本ID“强词夺理”的优秀品质了吧。
不怕做不到;就怕想不到!!
各位领教了本ID“强词夺理”的优秀品质了吧。
#11
万一第一个&和第二个&之间 有4G个字符捏?!
不怕做不到;就怕想不到!!
各位领教了本ID“强词夺理”的优秀品质了吧。
你不仅是强词夺理,还是“信口开河”的高手!
VB6是32位程序,理论上“最大内存地址空间容量”就只有4GB;
然而这“4GB地址空间”中,高2GB段默认是“系统保留空间”,这时最多“2GB空间”了;
即使通过更改配置参数,也最多能把“用户空间”扩展到3GB而已。
另外,“低64KB”是用户程序无法访问的,这样“理论极限可用地址空间容量”已经低于3GB了!
VB6中,每个字符要占用2字节,而“数据空间”最大范围还达不到3GB,算下来最多只能“1.5GB个字符”了,
你如何给我整得出“4GB个字符”来!!!
#12
边界条件不是每个人都能想全的。
#13
边界条件不是每个人都能想全的。
#14
边界条件不是每个人都能想全的。
但是你的代码也处理不了4G的内容呀,没看出来你的代码解决了什么别人没能解决问题?
#15
Dim strData As String, strSubString() As String
strData = "&BBBBB"
strSubString = Split(strData, "&")
If UBound(strSubString) >= 1 Then
Debug.Print "["; strSubString(1); "]" ‘BBBBB ?
End If
小心驶得万年船
楼主所说的第一个 & 可看作起始标志,第二个 & 可看作结束标志。
BBBBB 显然是在起始标志之后。如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。
#16
UBound是个抽风型函数,返回值是-1的时候,有时候能返回,有时候报错
#17
边界条件不是每个人都能想全的。
但是你的代码也处理不了4G的内容呀,没看出来你的代码解决了什么别人没能解决问题?
我的代码不是纠正问题,是举出一个异常数据,暴露问题用的。
#18
“如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。”
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug
#19
假设有字符串a,长度未知;(a必须有长度限制,比如2..1073741824)
字符串a 中有特定字符“&”,个数未知;(&的个数必须有限制,比如2..1073741824)
现需要提取第一个"&"和第二个"&”之间的字符串!(两个&之间的每个字符必须合法)
还要确保字符串的编码是VB6默认的Unicode
……
字符串a 中有特定字符“&”,个数未知;(&的个数必须有限制,比如2..1073741824)
现需要提取第一个"&"和第二个"&”之间的字符串!(两个&之间的每个字符必须合法)
还要确保字符串的编码是VB6默认的Unicode
……
#20
一初学者问个问题,结果神仙打架
#21
我的标准答案都被无视了
#22
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
万一字符串不是unicode编码,你的“标答”估计也有bug
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
#23
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
Talk is cheap.
#24
“如果没有结束标志,那么起始标志后的整个的串都应看作匹配子串的一部分,虽然可能没有结束。”
只是用人的常识和智慧解决问题的权宜之计。
对于天生只懂逻辑严密的处女座电脑而言,可以认为是bug
如果将这样的串作为正常输入提交,那么有两种可能的协议许可:
1 对于最后的串,可以用串的结束标志来替代专用的结束字符,即最后的结束字符可省略。
2 如果将第二个 & 看作与后续无关内容的分隔符,当在存在后续无关内容时,它可以省略。
当然了,对于有强迫症的开发者,另当别论。他可以在输入时在最后加上这个无用的 &。
#25
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
Talk is cheap.
比如HTML编码字符串:<&bug&>
#26
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
Talk is cheap.
比如HTML编码字符串:<&bug&>
好吧,你赢了。
#27
边界条件
输入格式检查
输出是否会导致乱码
……
这些问题是码农永远的t
我的标准答案都被无视了
万一字符串不是unicode编码,你的“标答”估计也有bug
Talk is cheap.
比如HTML编码字符串:<&bug&>
在VB6中,字符串就是字符串,哪管它什么“xx代码、xx转义”什么的!
当“传入”字符串内容是 <&bug&>的时候,
难道你就觉得楼主需要的一定就是 "bug",而不是 lt; 么!!!
#28
总而言之,想写一段程序就满足未来无穷的需求变化,是不可能的。
#29
为毛要写万能代码,根据具体需求来不行么
#30
可能是我的问题描述不够准确 !
我需要处理的字符串为 数字、 英文字母、 / 、 - 、 & 混合的字符,长度也不会很长,所以"&"的数量 也不会太多!
最开始,我有用 类似 4 楼 bakw 的方法!!
但是我感觉代码不够简洁,
并且我的程序中 需要这样处理的地方只有一处,
故最后我采用了 2楼 Runnerchin 的方法!!
最后,还是非常感谢诸位的帮助!