如何使用任何空白字符作为分隔符拆分字符串

Posted

技术标签:

【中文标题】如何使用任何空白字符作为分隔符拆分字符串【英文标题】:How to split a string with any whitespace chars as delimiters 【发布时间】:2010-09-18 12:40:27 【问题描述】:

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

【问题讨论】:

【参考方案1】:

有些东西

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

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

所以如果我有字符串:

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

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

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

\\s 等同于 [ \\t\\n\\x0B\\f\\r]

【讨论】:

感谢您的提醒。我只是从臀部编码:) 请注意,您需要先trim()trim().split("\\s++") - 否则,例如拆分 `a b c` 将首先发出两个空字符串。 你为什么在答案结尾处使用四个反斜杠? IE。 "\\\\s"? "".trim().split("\\s+") - 空字符串拆分的长度为 1。 "term".trim().split("\\s+") - 也给你一个长度 1。【参考方案2】:

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

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

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

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

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

\d - 匹配任何数字。

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

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

【讨论】:

有用链接:docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/… 读取模式类JavaDoc:docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html【参考方案3】:

为了让这个在 Javascript 中运行,我必须执行以下操作:

myString.split(/\s+/g)

【讨论】:

这是在 javascript 中。我也没注意 :) 糟糕。我的错。也许这个答案仍然会帮助其他一些在寻找 Javascript 答案时偶然发现这个线程的人。 :-) 哈哈 我在寻找 JavaScript 的答案,偶然发现了这个问题,然后在我离开之前注意到了你的答案。 +1。 太好了!我很高兴听到这个答案被证明对某人有用,即使它确实回答了错误的问题。 :-) 这对我也很有帮助,需要拆分服务器参数 :)【参考方案4】:

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

【讨论】:

为什么加在最后? @Anarelle 它至少重复一次空格字符捕获,并且尽可能多次:参见https://regex101.com/r/dT7wG9/1 或http://rick.measham.id.au/paste/explain.pl?regex=\s%2B 或http://regexper.com/#^s%2B 或http://www.myezapp.com/apps/dev/regexp/show.ws?regex=\s+&env=env_java【参考方案5】:

您也可能有一个 UniCode 不间断空格 xA0...

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

【讨论】:

这对我有帮助! 我也是。当我尝试更新索引别名时,我在 ElasticSearch 的响应中发现了这个字符。简单的 \\s+ 没有达到预期的效果。【参考方案6】:
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

【讨论】:

@Stephan 我没看到那些。【参考方案7】:

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)

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

【讨论】:

【参考方案8】:

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

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

【讨论】:

【参考方案9】:

您只需要使用 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+");

你会得到想要的输出。


一些非常有用的链接:

Split() method Best Examples Regexr split-Java 11 RegularExpInfo PatternClass

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

【讨论】:

【参考方案10】:

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

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

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

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

【讨论】:

【参考方案11】:
String str = "Hello   World";
String res[] = str.split("\\s+");

【讨论】:

【参考方案12】:

要使用任何 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,  , »]

【讨论】:

【参考方案13】:

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

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

示例

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

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

【讨论】:

【参考方案14】:

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

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

         
    

【讨论】:

你能详细说明你的答案吗?

以上是关于如何使用任何空白字符作为分隔符拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何拆分具有多个分隔符powershell的字符串?

如何基于多个空格字符将文本文件拆分为 2 列作为 scala spark 的分隔符

拆分C++字符串提升?

当出现任何给定的分隔符时拆分 JavaScript 字符串 [重复]

如何拆分()关于多个分隔符的字符串? [复制]

如何使用字符串分隔符拆分字符串? [复制]