public static void main(String[] args){
String testStr = "Test test. Test 2. Test3?";
String[] newStr = testStr.split(".?");
System.out.print(newStr[0]);
}
我得到一个运行此的数组索引超出界限异常,并且newStr的长度为0.我想在“。”上将句子分解为标记。和“?”。我犯了什么错误?
答案 0 :(得分:4)
你必须逃避这些角色。使用"\\."
和"\\?"
。这是因为String#split
接收正则表达式,并且这两个字符都是正则表达式中的特殊字符。
答案 1 :(得分:4)
您需要转发.
和?
。使用:
String[] newStr = testStr.split("\\.|\\?");
答案 2 :(得分:4)
String#split
将正则表达式作为要拆分的参数。 .
和?
在正则表达式中具有特殊含义。
您可以使用字符类拆分其中任何一个:
testStr.split("[.?]");
在角色类中,您不需要转义它们,因为特殊字符在字符类中失去意义。
如果将它与普通管道|
一起使用,则需要将其转义: -
testStr.split("\\.|\\?");
更新: - 如果您想保留分隔符:
testStr.split("(?<=[.?])")