正则表达式从字符串中获取前两个未知长度的单词

Too*_*ook 6 java regex

假设我有一个字符串,其中包含各种未知长度的单词.我计划使用正则表达式拆分字符串.就像是:

String resString = origString.split(".*//s.*//s")[0];
Run Code Online (Sandbox Code Playgroud)

获得前两个单词的正则表达式是什么?我在想.*//s.*//s,所有的角色,然后是空格,然后是所有角色,接着是另一个空格.但使用它给了我以前完全相同的字符串.我是以错误的方式来做这件事的吗?

任何帮助,将不胜感激!

icy*_*com 12

如果单词之间只有空格,则拆分\\s+.拆分时,数组本身就是单词.前两个将进入arr[0],arr[1]如果你这样做:

String[] arr = origString.split("\\s+");
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您想将其精确地拆分为空格字符:

String[] parts = args[i].split(" ");
Run Code Online (Sandbox Code Playgroud)

如果您想将其拆分为任何空白字符(空格、制表符、换行符、cr):

String[] parts = args[i].split("\\s");
Run Code Online (Sandbox Code Playgroud)

要将多个相邻空格视为一个分隔符:

String[] parts = args[i].split(" +");
Run Code Online (Sandbox Code Playgroud)

对于空白也同样:

String[] parts = args[i].split("\\s+");
Run Code Online (Sandbox Code Playgroud)

前两个词是parts[0]andparts[1]


小智 5

使用正则表达式,您可以执行以下操作:

    public static ArrayList<String> split2(String line, int n){
    line+=" ";
    Pattern pattern = Pattern.compile("\\w*\\s");
    Matcher matcher = pattern.matcher(line);
    ArrayList<String> list = new ArrayList<String>();
    int i = 0;
    while (matcher.find()){
        if(i!=n)
            list.add(matcher.group());
        else
            break;
        i++;
    }
    return list;
}
Run Code Online (Sandbox Code Playgroud)

如果你想要前n个单词,或者只是这个:

    public static String split3(String line){
    line+=" ";
    Pattern pattern = Pattern.compile("\\w*\\s\\w*\\s");
    Matcher matcher = pattern.matcher(line);
    matcher.find();
    return matcher.group();
}
Run Code Online (Sandbox Code Playgroud)

如果你只想要第一个和第二个词.