 |
| J2SE使用String.splt时候应该注意的一个问题 |
|
littleredboy 原创 更新:2006-11-10 13:15:42 版本: 1.0
|
|
String xx="aaa,bbb,ccc,,,,,,"; System.out.println(xx.split(",").length);
上述代码打印出什么,你可能会觉得是8,但执行一下代码你就会发现,打印出来的是3 这个是我在解析STRING时候发现的一个BUG,个人也没什么更好的解决办法。
现在暂时的解决方案是在xx后面加一个空格,就可以得到正确结果了。加上空格以后得到的结论就是9,最后一项是我们加上的空格。
|
|
|
评论人:newred
|
发表时间: Sat Nov 11 11:38:07 CST 2006
|
|
java对正则表达式很多时候效果都不怎么好
|
|
|
评论人:82529gfl
|
发表时间: Sat Nov 11 12:46:34 CST 2006
|
这不是什么Bug,String的split方法有两种形式: split(String s):以s分割,如果分割后的得到的字符串长度为零,就不包含在返回结果中; split(String s,int limit):返回Math.min(Math.abs(limit),实际分割长度)。
你可以使用: String xx="aaa,bbb,ccc,,,,,,"; System.out.println(xx.split(",",xx.length()).length); 得到你想要的结果。
|
|
|
评论人:wf_chn
|
发表时间: Mon Nov 13 09:50:10 CST 2006
|
1.5.0中limit的解释好像不太一样 为负时应该是尽可能多的分解
|
|
|
评论人:harlot
|
发表时间: Tue Nov 14 14:25:48 CST 2006
|
public String[] split(String regex, int limit)根据匹配给定的正则表达式来拆分此字符串。 此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。
limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。
例如,字符串 "boo:and:foo" 使用这些参数可生成下列结果:
Regex Limit 结果 : 2 { "boo", "and:foo" } : 5 { "boo", "and", "foo" } : -2 { "boo", "and", "foo" } o 5 { "b", "", ":and:f", "", "" } o -2 { "b", "", ":and:f", "", "" } o 0 { "b", "", ":and:f" }
这种形式的方法调用 str.split(regex, n) 产生与以下表达式完全相同的结果:
Pattern.compile(regex).split(str, n)
参数: regex - 定界正则表达式 limit - 结果阈值,如上所述 返回: 字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组 抛出: PatternSyntaxException - 如果正则表达式的语法无效 从以下版本开始: 1.4 另请参见: Pattern
|
|
|
评论人:mrou2001
|
发表时间: Thu Dec 07 14:21:32 CST 2006
|
|
加油啊,支持[java]
|
|
|
|
|
 |