我需要传递给java.lang.String.split()以使用所有空白字符(' ','\t', '\n'等)作为分隔符将字符串分割为子字符串数组的正则表达式模式是什么?
在大多数正则表达式方言中,都有一组方便的字符摘要可以用于这种事情——这些都是需要记住的:
\w -匹配任何单词字符。
\W -匹配任何非单词字符。
\s -匹配任何空白字符。
只匹配空白字符。
\d -匹配任何数字。
D -除数字以外的任何东西都可以匹配。
搜索“Regex Cheatsheets”,你会得到很多有用的摘要。
之类的东西
myString.split("\\s+");
这将所有空格分组为分隔符。
如果我有一个字符串:
"Hello[space character][tab character]World"
这将产生字符串“Hello”和“World”,并省略[空格]和[制表符]之间的空白。
正如VonC指出的,反斜杠应该转义,因为Java首先会尝试将字符串转义为一个特殊字符,并将其发送给解析。你想要的是字面上的“\s”,这意味着你需要传递“\\s”。这可能会让人有点困惑。
s相当于[\\t\\n\\x0B\\f\ r]。
因为它是一个正则表达式,我假设你也不会想要非字母数字字符,如逗号,点,等,可以被空格包围(例如。“one, two”应该给出[one][two]),它应该是:
myString.split(/[\s\W]+/)
Apache Commons Lang有一个方法可以用空白字符作为分隔符分割字符串:
StringUtils.split("abc def")
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 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)")
参见正则表达式演示。参见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, , »]
你所需要的是使用Java Ragex引擎的一个特殊字符来分割,
那就是- WhiteSpace Character
\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()方法 Regexr split-Java 11 RegularExpInfo PatternClass
希望,这可能会帮助你最好!!
推荐文章
- Eclipse调试器总是阻塞在ThreadPoolExecutor上,没有任何明显的异常,为什么?
- 我如何检查如果一个变量是JavaScript字符串?
- 如何显示有两个小数点后的浮点数?
- Java生成两个给定值之间的随机数
- 如何有效地从数组列表或字符串数组中删除所有空元素?
- 比较JUnit断言中的数组,简洁的内置方式?
- codestyle;把javadoc放在注释之前还是之后?
- 如何在Spring中定义List bean ?
- 将Set<T>转换为List<T>的最简洁的方法
- 在JavaScript中,什么相当于Java的Thread.sleep() ?
- 在Lua中拆分字符串?
- 使用Java重命名文件
- URL从Java中的类路径加载资源
- .toArray(new MyClass[0]) or .toArray(new MyClass[myList.size()])?
- Hibernate中不同的保存方法之间有什么区别?