我需要将一个java字符串拆分成一个单词数组。让我们说字符串是:
"Hi!! I need to split this string, into a serie's of words?!"
目前我尝试使用此String[] strs = str.split("(?!\\w)")
,但它会保留符号,例如!在数组中,它还保留了像#34; Hi!"在数组中也是如此。我分裂的字符串将始终为小写。我希望生成的数组看起来像:
{"hi", "i", "need", "to", "split", "this", "string", "into", "a", "serie's", "of", "words"}
- 请注意保留撇号。
我怎样才能将我的正则表达式更改为不包含数组中的符号?
道歉,我会将一个单词定义为一系列字母数字字符,但使用'如果字符在上面的上下文中,例如"它"",如果它用于引用诸如"''''&# 34 ;.此外,在这种情况下"嗨,"或者" hi-person"不是单词而是" hi"和"人"是。我希望澄清这个问题。
答案 0 :(得分:9)
您可以删除所有?!
符号,然后将其拆分为单词
str = str.replaceAll("[!?,]", "");
String[] words = str.split("\\s+");
结果:
Hi, I, need, to, split, this, string, into, a, serie's, of, words
答案 1 :(得分:3)
应该为你想要的东西工作。
String line = "Hi!! I need to split this string, into a serie's of words?! but not '' or ''' word";
String regex = "([^a-zA-Z']+)'*\\1*";
String[] split = line.split(regex);
System.out.println(Arrays.asList(split));
给出
[Hi, I, need, to, split, this, string, into, a, serie's, of, words, but, not, or, word]
答案 2 :(得分:2)
如果将单词定义为非空白字符序列(由\s
定义的空白字符),则可以沿空格字符分割:
str.split("\\s+")
请注意,";.';.@#$>?>@4"
,"very,bad,punctuation"
和"'goodbye'"
是上述定义下的字词。
然后另一种方法是将一个单词定义为一组允许的字符中的字符序列。如果您想允许a-z
,A-Z
和'
作为单词的一部分,您可以将其他所有内容分开:
str.split("[^a-zA-Z']+")
但仍然可以将"''''''"
定义为单词。
答案 3 :(得分:0)
您可以过滤掉您认为是“非单词”字符的字符:
String[] strs = str.split("[,!? ]+");
答案 4 :(得分:0)
我会使用str.split("[\\s,?!]+")
。您可以在括号[]
内添加要拆分的任何字符。
答案 5 :(得分:0)
所以你想要的是分裂任何不是字符[a-zA-Z]的东西,而不是' 这个正则表达式将执行“[^ a-zA-Z'] \ s ” 如果字符串包含在“
中引用的引号,则会出现问题我通常使用此页面来测试我的正则表达式' http://www.regexplanet.com/advanced/java/index.html
答案 6 :(得分:0)
myString.replaceAll("[^a-zA-Z'\\s]","").toLowerCase().split("\\s+");
replaceAll("[^a-zA-Z'\\s]","")
方法替换所有不是a-z
或A-Z
或'
或whitespace
的所有字符(""
)和然后toLowerCase
方法使所有字符从replaceAll
方法小写返回。最后,我们根据空白字符split
输入字符串。更具可读性;
myString = myString.replaceAll("[^a-zA-Z'\\s]","");
myString = myString.toLowerCase();
String[] strArr = myString.split("\\s+");