所有字符都可以用作Java中的String Delimiters?

时间:2014-03-04 09:25:21

标签: java string delimiter

我正在尝试使用分隔符(“:”)打破各种各样的字符串。

    String sepIds[]=ids.split(":");

工作正常。但是当我用“*”替换“:”并使用“*”作为分隔符时,它不起作用。

    String sepIds[]=ids.split("*"); //doesn't work

它只是挂起,并没有进一步执行。

我在这里犯了什么错误?

6 个答案:

答案 0 :(得分:1)

String.split需要一个正则表达式参数。 *在正则表达式中有意义。因此,如果你想使用它们,那么你需要像这样逃避它们:

String sepIds[]=ids.split("\\*");

答案 1 :(得分:1)

String#splitregular 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)

'*'和'。'是特殊字符,你必须将其缩短。

String sepIds[]=ids.split("\\*");

要了解有关java模式的更多信息,请访问that page.

答案 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