573

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

4

14 回答 14

982

有点像

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

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

所以如果我有字符串:

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

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

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

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

于 2008-10-22T11:31:11.640 回答
91

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

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

\W- 匹配任何非单词字符。

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

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

\d- 匹配任何数字。

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

搜索“Regex Cheatsheets”应该会给你很多有用的总结。

于 2008-10-22T11:30:37.430 回答
68

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

myString.split(/\s+/g)
于 2012-03-01T22:18:11.040 回答
38

"\\s+" 应该可以解决问题

于 2008-10-22T11:29:25.247 回答
12

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

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
于 2014-09-09T03:29:23.780 回答
10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
于 2016-03-31T18:14:14.643 回答
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)

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

于 2013-12-01T17:10:18.083 回答
2

因为它是一个正则表达式,我假设你也不想要逗号、点等可能被空格包围的非字母数字字符(例如,“一,二”应该给出 [一] [二]),它应该是:

myString.split(/[\s\W]+/)
于 2012-02-14T09:01:22.270 回答
2

您只需要使用 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是小字母字符代表所有类型的空格,包括单个空格[ ]、制表符[ ]或任何类似的字符。

所以,如果你会尝试这样的事情 -

String theString = "Java<a space><a tab>Programming"
String []allParts = theString.split("\\s+");

您将获得所需的输出。


一些非常有用的链接:


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

于 2021-01-21T21:35:19.120 回答
1

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

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

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

String textStr[] = yourString.split("\\s+");
于 2014-09-01T13:40:50.347 回答
1
String str = "Hello   World";
String res[] = str.split("\\s+");
于 2015-04-12T04:04:41.493 回答
1

要使用任何 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,  , »]
于 2020-08-16T20:09:32.630 回答
0

当您只想按空格而不是制表符拆分时,例如,您可以使用:

String[] words = textline.split(" ");

例子

textline: "忽略第一个单词中的制表符"

words: [igno\tre, the, tab, in, the, first, word]

于 2021-09-09T07:11:43.860 回答
-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);

        } 
    }
}
于 2016-10-24T14:08:00.437 回答