如何将带有任何空格字符的字符串拆分为分隔符?

时间:2008-10-22 11:27:17

标签: java string whitespace split

需要使用所有正则表达式模式传递给java.lang.String.split()方法,以使用所有空格字符('','\ t','\ n'等)将字符串拆分为子字符串数组定界符?

14 个答案:

答案 0 :(得分:920)

中的某些内容
myString.split("\\s+");

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

所以,如果我有字符串:

"Hello[space][tab]World"

这应该会产生字符串"Hello""World",并省略[space][tab]之间的空白区域。

正如VonC指出的那样,反斜杠应该被转义,因为Java会首先尝试将字符串转义为特殊字符,并发送 进行解析。您想要的是文字"\s",这意味着您需要传递"\\s"。它可能会有点混乱。

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

答案 1 :(得分:85)

在大多数正则表达方言中,有一组方便的字符摘要可用于此类事情 - 这些都是值得记住的好词:

\w - 匹配任何单词字符。

\W - 匹配任何非字符。

\s - 匹配任何空格字符。

\S - 匹配除空白字符之外的任何内容。

\d - 匹配任何数字。

\D - 匹配除数字之外的任何内容。

搜索“Regex Cheatsheets”应该会奖励你很多有用的摘要。

答案 2 :(得分:61)

要在Javascript 中使用,我必须执行以下操作:

myString.split(/\s+/g)

答案 3 :(得分:35)

“\\ s +”应该做的伎俩

答案 4 :(得分:10)

此外,您可能拥有UniCode不间断空格xA0 ...

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

答案 5 :(得分:10)

String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

答案 6 :(得分:8)

Apache Commons Lang有一种方法可以将带有空格字符的字符串拆分为分隔符:

StringUtils.split("abc def")

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#split(java.lang.String)

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

答案 7 :(得分:2)

因为它是一个正则表达式,并且我假设你也不希望非字母数字字符如逗号,点等可以被空格包围(例如“一,二”应该给[一] [两个] ]),它应该是:

myString.split(/[\s\W]+/)

答案 8 :(得分:2)

我很惊讶没有人提到没有参数的String.split()。这不是它的目的吗?如:

"abc def ghi".split()

答案 9 :(得分:2)

要使用 任意Unicode空格 分割字符串,您需要使用

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

(?U)内联嵌入式标志选项与Pattern.UNICODE_CHARACTER_CLASS等效,它使\s速记字符类可以匹配空白Unicode类别的任何字符。

如果要拆分空格并在结果数组中保留空格,请使用

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

请参见regex demo。参见Java demo

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,  , »]

答案 10 :(得分:1)

您可以使用以下语句按换行符拆分字符串:

 String textStr[] = yourString.split("\\r?\\n");

您可以使用以下语句按空格分割字符串:

String textStr[] = yourString.split("\\s+");

答案 11 :(得分:1)

String str = "Hello   World";
String res[] = str.split("\\s+");

答案 12 :(得分:1)

您所需要的只是使用 Java Ragex Engine 的特殊字符之一进行拆分,

那就是- 空白字符

  • \d 代表一个数字:[0-9]
  • \D 代表一个非数字:[^0-9]
  • \s 代表一个空白字符,包括[ \t\n\x0B\f\r]
  • \S 将非空白字符表示为 [^\s]
  • \v 将垂直空白字符表示为 [\n\x0B\f\r\x85\u2028\u2029]
  • \V 将非垂直空白字符表示为 [^\v]
  • \w 将单词字符表示为 [a-zA-Z_0-9]
  • \W 将非单词字符表示为 [^\w]

这里,要记住的关键点是小字母字符 \s 代表所有类型的空格,包括单个空格 [ ] 、制表符 {{1} } 或任何类似的东西。

所以,如果你尝试会像这样-

[        ]

您将获得所需的输出。


一些非常有用的链接:


希望,这可能对你有最大的帮助!!!

答案 13 :(得分:-1)

研究这段代码..祝你好运

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

        } 
    }
}