在解决UVa question问题时,我得到了String
,我需要将String
数组拆分为#
和@
Brazil#2@1#Scotland
我使用时遇到ArrayOutOfBounds
例外,
matchSummary.split("#@");
在研究了这个UVa问题的解决方案之后,我发现其他有经验的竞争程序员已经这样做了,
string.split("[#@]");
这通过了在线评判的判决。
我无法对前面提到的String
String
分割
此问题的完整解决方案可在此处获取 - see
有人可以向我解释为什么我的代码适用于split("[#@]");
吗?
答案 0 :(得分:2)
基本上使用:
split("#@");
只有当它与#
@
同时匹配
使用:
split("[#@]");
您正在从课程中选择要分为#
或@
答案 1 :(得分:2)
在Java regular expressions中,括在方括号[]
中的字符称为字符类。
此...
String input = "Brazil#2@1#Scotland";
System.out.println(Arrays.toString(input.split("[#@]")));
...会将String
与分隔符#
或@
分开,无论顺序如何,并输出:
[Brazil, 2, 1, Scotland]
在这种情况下等同于:
System.out.println(Arrays.toString(input.split("#|@")));
但是,如果#@
未被[]
括起来,则会搜索#
后跟@
的序列。
这不会触发任何ArrayIndexOutOfBoundsException
本身,它只返回包含原始输入array
的1个大小的String
。
但是,您可能会在代码中稍后将array
大小设为> 1
,因此Exception
。{{1}}。
答案 2 :(得分:1)
[#@]
表示它会在#
或@
上分开。
了解更多信息: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
答案 3 :(得分:1)
split函数给出错误的原因是因为@和#不在字符串中,我建议使用StringTokenizer来拆分字符串。
所以创建一个新实例 - StringTokenizer s = new StringTokenizer(" Brazil#2 @ 1#Scotland");
然后将分隔符设置为@然后拆分它们,然后使用分隔符#
拆分它们