我将尝试在空格和一些特殊字符上分割字符串。
给定字符串 "john - & + $ ? . @ boy",我想要得到数组:
array[0]="john";
array[1]="boy";
我尝试了几个正则表达式,但都没有得到结果。这是我当前的尝试:
String[] terms = uglString.split("\\s+|[\\-\\+\\$\\?\\.@&].*");
保留“john”但不保留“boy”。有人可以帮我找出剩下的内容吗?
我将尝试在空格和一些特殊字符上分割字符串。
给定字符串 "john - & + $ ? . @ boy",我想要得到数组:
array[0]="john";
array[1]="boy";
我尝试了几个正则表达式,但都没有得到结果。这是我当前的尝试:
String[] terms = uglString.split("\\s+|[\\-\\+\\$\\?\\.@&].*");
只需使用:
String[] terms = input.split("[\\s@&.?$+-]+");
你可以在字符类中使用简写字符类(注意 \s
),大多数元字符在字符类中失去了它们的意义,除了 [
、]
、-
、&
、\
。然而,只有当 &&
成对出现时,&
才有意义,如果把 -
放在字符类的开头或结尾,则被视为普通字符。
其他语言可能有不同的模式解析规则,但关于 -
的规则适用于大多数引擎。
正如 @Sean Patrick Floyd 在他的回答中提到的那样,重要的是定义什么构成一个单词。Java 中的 \w
相当于 [a-zA-Z0-9_]
(英文字母大写和小写、数字和下划线),因此,\W
包括所有其他字符。如果您想考虑 Unicode 字母和数字,可以看一下Unicode 字符类。
"\\W+"
(一个或多个非单词字符的出现)来使你的代码更简单。(这样你就是在列出允许的字符,而不是列出禁止的字符,这通常是个好主意)。当然,你还可以使用Guava的Splitter
类来提高效率。Input.replace("-&+$?.@"," ").split(" ");
分步骤解释:
对于您的情况,您需要替换非单词字符(如所指出的)。现在您可能想保留空格以便进行简单的字符串拆分。
String ugly = "john - & + $ ? . @ boy";
String words = ugly.replaceAll("[^\\w\\s]", "");
String formatted = words.trim().replaceAll(" +", " ");
String[] terms = formatted.split("\\s");
System.out.println(terms[0]);
这里是内容。
String s = "john - & + $ ? . @ boy";
String reg = "[!_.',@? ]";
String[] res = s.split(reg);
在 [ ]
括号内包含您想要拆分的每个字符。
关于Splitter
,你可以这样做:
String str = "john - & + $ ? . @ boy";
Iterable<String> ttt = Splitter.on(Pattern.compile("\\W")).trimResults().omitEmptyStrings().split(str);
\s\W
相当于 \W
。单词字符类不包含空格,因此非单词字符类包含空格。 - nhahtdharrayOfStringType=string.split(" |'|,|.|//+|_");
'|' 在这里将作为或运算符。