Java从字符串中逐字读取

时间:2017-11-26 19:07:28

标签: java string split

我有一个字符串,我会考虑每个单词。例如:

"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]", "");
}

但我不知道我需要用两个不同的词来分隔“那是”的正则表达式。

4 个答案:

答案 0 :(得分:1)

您是否完全确定需要将that's视为两个字? ( viz that is

通常情况下,我认为that's被算作英文单词。

但是如果你对要求的看法是正确的,你就会遇到(中等)难题:我不认为有任何(合理的)正则表达式可以区分that's之类的东西(收缩) thatis)以及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']");