我有一个字符串,我会考虑每个单词。例如:
"That's a good question"
我需要详细说明每一个字:
That, s, a, good, question
我不需要保存它们我需要阅读单个单词。
我正在测试这个解决方案:
String s = "That's a good question";
String[] words = s.split("\\s+");
for (int i = 0; i < words.length; i++) {
words[i] = words[i].replaceAll("[^\\w]", "");
}
但我不知道我需要用两个不同的词来分隔“那是”的正则表达式。
答案 0 :(得分:1)
您是否完全确定需要将that's
视为两个字? ( viz 。that is
)
通常情况下,我认为that's
被算作英文单词。
但是如果你对要求的看法是正确的,你就会遇到(中等)难题:我不认为有任何(合理的)正则表达式可以区分that's
之类的东西(收缩) that
和is
)以及steve's
(占有)等。
AFAIK你必须自己写点东西。
建议:看看这个list of English language contractions。您可以使用它以特殊方式枚举您需要处理的事物。
enum Contraction {
AINT("ain't", "is not"),
ARENT("aren't", "are not"),
// Many, many in between...
YOUVE("you've", "you have");
private final String oneWord;
private final String twoWords;
private Contraction(String oneWord, String twoWords) {
this.oneWord = oneWord;
this.twoWords = twoWords;
}
public String getOneWord() {
return oneWord;
}
public String getTwoWords() {
return twoWords;
}
}
String s = "That's a good question".toLowerCase();
for (Contraction c : Contraction.values()) {
s = s.replaceAll(c.getOneWord(), c.getTwoWords())
}
String[] words = s.split("\\s+");
// And so forth...
注意:此示例通过将整个输入转换为小写来处理区分大小写,因此enum
中的元素将匹配。如果这对您不起作用,您可能需要以另一种方式处理它。
我不清楚你拥有它们后需要做些什么,所以我把那部分留了出来。
答案 1 :(得分:0)
如果你正在寻找匹配撇号的正则表达式,你可以使用它 获取包含它的整个字符串。
.*["'].*
这是针对撇号本身的
["']
答案 2 :(得分:0)
这应该有效。在通过split方法运行之前,将s替换为第二个单词。
s.replaceALL("\'s", " is");
String[] words = s.split("\\s+");
这也改变了那就是“那,是”如果这就是你想要做的事情
答案 3 :(得分:0)
如果我没有误解你,这就是你要找的东西 - 用String[] words = s.split("\\s+");
改变String[] words = s.split("[\\s']");
。