我正在尝试使用分隔符(“:”)打破各种各样的字符串。
String sepIds[]=ids.split(":");
工作正常。但是当我用“*”替换“:”并使用“*”作为分隔符时,它不起作用。
String sepIds[]=ids.split("*"); //doesn't work
它只是挂起,并没有进一步执行。
我在这里犯了什么错误?
答案 0 :(得分:1)
String.split
需要一个正则表达式参数。 *在正则表达式中有意义。因此,如果你想使用它们,那么你需要像这样逃避它们:
String sepIds[]=ids.split("\\*");
答案 1 :(得分:1)
String#split以regular expression为参数。在正则表达式中,一些字符具有特殊含义,因此需要对它们进行转义,例如:
"foo*bar".split("\\*")
结果将如你所愿:
[foo, bar]
您还可以使用方法Pattern#quote来简化任务。
"foo*bar".split(Pattern.quote("*"))
答案 2 :(得分:1)
.split()
的参数是正则表达式,而不是字符串文字。因此,您需要转义*
,因为它是一个特殊的正则表达式字符。写:
ids.split("\\*");
这就是你如何分割一个或多个空格:
ids.split("\\s+");
请注意,Guava的Splitter
速度非常快,可以根据文字进行拆分:
Splitter.on('*').split(ids);
答案 3 :(得分:1)
答案 4 :(得分:1)
这是预期的行为。 documentation for the String split function表示输入字符串被视为regular expression(带有解释其工作原理的链接)。正如Germann指出的那样,'*'是正则表达式中的特殊字符。
答案 5 :(得分:1)
Java的String.split()
使用正则表达式来分割字符串(与C#或python中的类似函数不同)。 *
是正则表达式中的特殊字符,您需要使用\
(反斜杠)来转义它。所以你应该使用:
String sepIds[]=ids.split("\\*");
您可以在互联网上的任何地方找到有关正则表达式的更多信息,java提供的完整的特殊字符列表应该在此处:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html