如何分割字符串与任何空白字符作为分隔符

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

736146 次浏览

“\\s+”应该可以

在大多数正则表达式方言中,都有一组方便的字符摘要可以用于这种事情——这些都是需要记住的:

\w -匹配任何单词字符

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

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

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

\d -匹配任何数字

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

搜索“Regex Cheatsheets”,你会得到很多有用的摘要。

之类的东西

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

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

如果我有一个字符串:

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

这将产生字符串"Hello""World",并省略了[space][tab]之间的空白。

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

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

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

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

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

myString.split(/\s+/g)

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

StringUtils.split("abc def")

< a href = " http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html分裂(以)" > http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html分裂(以)< / >

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

你可以使用下面的语句用换行符分割字符串:

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

你可以使用下面的语句用空格分割字符串:

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

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

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
String str = "Hello   World";
String res[] = str.split("\\s+");
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

学习代码..祝你好运

    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空白分隔字符串,您需要使用

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

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

如果你想用空格和将空格保留在结果数组中分隔,请使用

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

请看regex演示。看到# EYZ1:

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

你所需要的就是使用Java Ragex引擎的特殊字符之一进行分割,

那就是- 空格字符

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

要记住的是,小字母字符\s表示所有类型的空白,包括单个空格[ ],制表符[ ]或类似的内容。

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

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

您将得到所需的输出。


一些非常有用的链接:


希望,这可能会帮助你最好!!