将句子字符串转换为Java中的字符串数组

Ani*_*RNG 42 java string words spaces

我需要我的Java程序采用如下字符串:

"This is a sample sentence."
Run Code Online (Sandbox Code Playgroud)

并将其转换为字符串数组,如:

{"this","is","a","sample","sentence"}
Run Code Online (Sandbox Code Playgroud)

没有句号或标点符号(最好).顺便说一下,字符串输入总是一个句子.

有没有一种简单的方法可以做到这一点,我没有看到?或者我们是否真的必须经常搜索空间并从空格之间的区域(这些是单词)创建新的字符串?

Ada*_*kin 59

String.split()将完成你想要的大部分工作.然后,您可能需要遍历单词以删除任何标点符号.

例如:

String s = "This is a sample sentence.";
String[] words = s.split("\\s+");
for (int i = 0; i < words.length; i++) {
    // You may want to check for a non-word character before blindly
    // performing a replacement
    // It may also be necessary to adjust the character class
    words[i] = words[i].replaceAll("[^\\w]", "");
}
Run Code Online (Sandbox Code Playgroud)

  • 你可以添加关于你使用的正则表达式的解释吗? (6认同)

小智 21

现在,这可以通过split正则表达式完成:

String s = "This is a sample sentence with []s.";
String[] words = s.split("\\W+");
Run Code Online (Sandbox Code Playgroud)

这会给出如下话语: {"this","is","a","sample","sentence", "s"}

\\W+将匹配出现一次或多次的所有非字母字符.所以没有必要更换.您也可以检查其他模式.

  • 您可能希望以 `(?U)` 开始正则表达式以启用 Unicode 字符类,否则它将仅适用于英文字母表。 (2认同)

Nin*_*ham 12

您可以使用BreakIterator.getWordInstance查找字符串中的所有单词.

public static List<String> getWords(String text) {
    List<String> words = new ArrayList<String>();
    BreakIterator breakIterator = BreakIterator.getWordInstance();
    breakIterator.setText(text);
    int lastIndex = breakIterator.first();
    while (BreakIterator.DONE != lastIndex) {
        int firstIndex = lastIndex;
        lastIndex = breakIterator.next();
        if (lastIndex != BreakIterator.DONE && Character.isLetterOrDigit(text.charAt(firstIndex))) {
            words.add(text.substring(firstIndex, lastIndex));
        }
    }

    return words;
}
Run Code Online (Sandbox Code Playgroud)

测试:

public static void main(String[] args) {
    System.out.println(getWords("A PT CR M0RT BOUSG SABN NTE TR/GB/(G) = RAND(MIN(XXX, YY + ABC))"));
}
Run Code Online (Sandbox Code Playgroud)

输出继电器:

[A, PT, CR, M0RT, BOUSG, SABN, NTE, TR, GB, G, RAND, MIN, XXX, YY, ABC]
Run Code Online (Sandbox Code Playgroud)


fin*_*nnw 11

你也可以使用BreakIterator.getWordInstance.

  • 哇。那个文档看起来非常好。在字符串中查找单词的简单方法。 (2认同)

小智 7

你可以使用这个正则表达式分割你的字符串

String l = "sofia, malgré tout aimait : la laitue et le choux !" <br/>
l.split("[[ ]*|[,]*|[\\.]*|[:]*|[/]*|[!]*|[?]*|[+]*]+");
Run Code Online (Sandbox Code Playgroud)


小智 6

尝试使用以下内容:

String str = "This is a simple sentence";
String[] strgs = str.split(" ");
Run Code Online (Sandbox Code Playgroud)

这将使用空格作为分割点在字符串数组的每个索引处创建子字符串.


Jam*_*mes 5

我能想到的最简单和最好的答案是使用java字符串上定义的以下方法 -

String[] split(String regex)
Run Code Online (Sandbox Code Playgroud)

并且只做"这是一个例句".split("").因为它需要正则表达式,所以您也可以执行更复杂的拆分,其中包括删除不需要的标点符号和其他此类字符.