我需要传递给java.lang.String.split()以使用所有空白字符(' ','\t', '\n'等)作为分隔符将字符串分割为子字符串数组的正则表达式模式是什么?


当前回答

之类的东西

myString.split("\\s+");

这将所有空格分组为分隔符。

如果我有一个字符串:

"Hello[space character][tab character]World"

这将产生字符串“Hello”和“World”,并省略[空格]和[制表符]之间的空白。

正如VonC指出的,反斜杠应该转义,因为Java首先会尝试将字符串转义为一个特殊字符,并将其发送给解析。你想要的是字面上的“\s”,这意味着你需要传递“\\s”。这可能会让人有点困惑。

s相当于[\\t\\n\\x0B\\f\ r]。

其他回答

学习代码..祝你好运

    import java.util.*;
class Demo{
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        System.out.print("Input String : ");
        String s1 = input.nextLine();   
        String[] tokens = s1.split("[\\s\\xA0]+");      
        System.out.println(tokens.length);      
        for(String s : tokens){
            System.out.println(s);

        } 
    }
}

你也可以有一个UniCode不间断空格xA0…

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking

要使用Unicode空白分隔字符串,需要使用

s.split("(?U)\\s+")
         ^^^^

(?U)内联嵌入标志选项相当于Pattern。UNICODE_CHARACTER_CLASS使\s的简写字符类匹配空白Unicode类别中的任何字符。

如果要使用空白分隔并将空白保留在结果数组中,请使用

s.split("(?U)(?<=\\s)(?=\\S)|(?<=\\S)(?=\\s)")

参见正则表达式演示。参见Java演示:

String s = "Hello\t World\u00A0»";
System.out.println(Arrays.toString(s.split("(?U)\\s+"))); // => [Hello, World, »]
System.out.println(Arrays.toString(s.split("(?U)(?<=\\s)(?=\\S)|(?<=\\S)(?=\\s)")));
// => [Hello,    , World,  , »]

Apache Commons Lang有一个方法可以用空白字符作为分隔符分割字符串:

StringUtils.split("abc def")

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html分裂(以)

这可能比正则表达式模式更容易使用。

为了让它在Javascript中工作,我必须做以下工作:

myString.split(/\s+/g)