字符串在Java中使用正则表达式拆分?

时间:2017-02-25 19:52:54

标签: java string core

我正在尝试基于正则表达式拆分字符串,其中包含" [。,?!] +'"所有这些字符包括单个空格但是没有发生分裂?

这是我的班级:

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);
}
        }
    }
}

3 个答案:

答案 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);
            }
        }
    }
}