Java在"。"上拆分字符串和"?"

时间:2012-10-17 06:07:52

标签: java

public static void main(String[] args){
    String testStr = "Test test. Test 2. Test3?";
    String[] newStr = testStr.split(".?");
    System.out.print(newStr[0]);
}

我得到一个运行此的数组索引超出界限异常,并且newStr的长度为0.我想在“。”上将句子分解为标记。和“?”。我犯了什么错误?

3 个答案:

答案 0 :(得分:4)

你必须逃避这些角色。使用"\\.""\\?"。这是因为String#split接收正则表达式,并且这两个字符都是正则表达式中的特殊字符。

答案 1 :(得分:4)

您需要转发.?。使用:

String[] newStr = testStr.split("\\.|\\?");

答案 2 :(得分:4)

String#split将正则表达式作为要拆分的参数。 .?在正则表达式中具有特殊含义。

您可以使用字符类拆分其中任何一个:

testStr.split("[.?]");

在角色类中,您不需要转义它们,因为特殊字符在字符类中失去意义。

如果将它与普通管道|一起使用,则需要将其转义: -

testStr.split("\\.|\\?");

更新: - 如果您想保留分隔符:

testStr.split("(?<=[.?])")