我需要传递什么正则表达式模式才能 使用所有空白字符( 、、、等)作为分隔符java.lang.String.split()
将字符串拆分为子字符串数组?' '
'\t'
'\n'
14 回答
有点像
myString.split("\\s+");
这会将所有空格分组为分隔符。
所以如果我有字符串:
"Hello[space character][tab character]World"
这应该产生字符串"Hello"
,并省略和"World"
之间的空格。[space]
[tab]
正如 VonC 指出的那样,应该转义反斜杠,因为 Java 会首先尝试将字符串转义为特殊字符,然后将其发送以进行解析。您想要的是文字"\s"
,这意味着您需要通过"\\s"
. 它可能会有点混乱。
\\s
相当于[ \\t\\n\\x0B\\f\\r]
。_
在大多数正则表达式方言中,有一组方便的字符摘要可用于此类事情 - 这些是要记住的好词:
\w
- 匹配任何单词字符。
\W
- 匹配任何非单词字符。
\s
- 匹配任何空白字符。
\S
- 匹配除空白字符以外的任何内容。
\d
- 匹配任何数字。
\D
- 匹配除数字以外的任何内容。
搜索“Regex Cheatsheets”应该会给你很多有用的总结。
为了让它在 Javascript中工作,我必须执行以下操作:
myString.split(/\s+/g)
"\\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+");
Apache Commons Lang 有一种方法可以使用空格字符作为分隔符来拆分字符串:
StringUtils.split("abc def")
这可能比正则表达式模式更容易使用。
因为它是一个正则表达式,我假设你也不想要逗号、点等可能被空格包围的非字母数字字符(例如,“一,二”应该给出 [一] [二]),它应该是:
myString.split(/[\s\W]+/)
您只需要使用 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+");
您将获得所需的输出。
一些非常有用的链接:
希望,这可能对你有最大的帮助!!!
您可以使用以下语句按换行符拆分字符串:
String textStr[] = yourString.split("\\r?\\n");
您可以使用以下语句按空格分割字符串:
String textStr[] = yourString.split("\\s+");
String str = "Hello World";
String res[] = str.split("\\s+");
要使用任何 Unicode 空格分割字符串,您需要使用
s.split("(?U)\\s+")
^^^^
内(?U)
联嵌入标志选项等效于Pattern.UNICODE_CHARACTER_CLASS
使\s
速记字符类能够匹配空白 Unicode 类别中的任何字符。
如果您想用空格分割并将空格保留在结果数组中,请使用
s.split("(?U)(?<=\\s)(?=\\S)|(?<=\\S)(?=\\s)")
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, , »]
当您只想按空格而不是制表符拆分时,例如,您可以使用:
String[] words = textline.split(" ");
例子
textline: "忽略第一个单词中的制表符"
words: [igno\tre, the, tab, in, the, first, word]
研究这段代码..祝你好运
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);
}
}
}