我正在尝试基于正则表达式拆分字符串,其中包含" [。,?!] +'"所有这些字符包括单个空格但是没有发生分裂?
这是我的班级:
public class splitStr {
public static void main(String[] args) {
String S="He is a very very good boy, isn't he?";
S.trim();
if(1<=S.length() && S.length()<=400000){
String delim ="[ .,?!]+'";
String []s=S.split(delim);
System.out.println(s.length);
for(String d:s)
{
System.out.println(d);
}
}
}
}
答案 0 :(得分:1)
它不起作用的原因是因为并非所有分隔符都在方括号内。
String delim ="[ .,?!]+'"; // you wrote this
改为:
String delim ="[ .,?!']";
答案 1 :(得分:0)
角色+
,'
,[
和]
是否必须成为分割的一部分?
我问这是因为加号和括号在正则表达式中具有特殊含义,如果您希望它们成为匹配的一部分,则必须使用\
转义它们
因此,如果你想要一个包含所有这些字符的表达式,它应该是:
delim = "[\\[ .,\\?!\\]\\+']"
请注意,我必须编写\\
,因为反斜杠需要在java字符串中进行转义。我也不确定?
和+
是否需要转义,因为它们在括号内(在它们之前使用和不使用反斜杠测试它)
我现在不在电脑前,所以我没有测试过,但我相信它应该可行。
答案 2 :(得分:0)
import java.util.*;
import java.util.stream.Collectors;
public class StringToken {
public static void main(String[] args) {
String S="He is a very very good boy, isn't he?";
S.trim();
if(1<=S.length() && S.length()<=400000){
String delim = "[ .,?!']";
String []s=S.split(delim);
List<String> d = Arrays.asList(s);
d= d.stream().filter(item-> (item.length() > 0)).collect(Collectors.toList());
System.out.println(d.size());
for(String m:d)
{
System.out.println(m);
}
}
}
}