java string.split()问题

时间:2014-07-29 20:11:08

标签: java regex

在解决UVa question问题时,我得到了String,我需要将String数组拆分为#@

Brazil#2@1#Scotland

我使用时遇到ArrayOutOfBounds例外,

matchSummary.split("#@");
在研究了这个UVa问题的解决方案之后,我发现其他有经验的竞争程序员已经这样做了,

string.split("[#@]");

这通过了在线评判的判决。

我无法对前面提到的String

进行String分割

此问题的完整解决方案可在此处获取 - see

有人可以向我解释为什么我的代码适用于split("[#@]");吗?

4 个答案:

答案 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");

然后将分隔符设置为@然后拆分它们,然后使用分隔符#

拆分它们