如何从java中的一系列字符中获取单词?

时间:2012-06-18 19:53:17

标签: java string parsing character

我有一个方法getNextChar(),它按字符读取字符串。我正在编写一种方法来获取getNextChar()提供的字符序列中的单词。

文字包含标点符号和其他特殊字符。

我想要一个包含所有标点符号和特殊字符的数组,当我读取文本的字符时,检查字符是否在数组中以忽略它。 当它获得空格时,该方法将识别该单词。 单词将存储在Collection (例如:map)中,因为我需要计算频率,同时检查单词是否已在地图中插入并增加这个词的反击。

  1. 这是最佳和高效的做法吗?我正在寻找最有效的方式。 A
  2. 是否有标点符号和特殊字符的完整列表

4 个答案:

答案 0 :(得分:1)

我认为有一种更简单的方法可以做到这一点。

无论您的输入源是什么,我都会使用Scanner类阅读它。您可以使用输入字符串实例化此类,并调用Scanner.nextWord()方法以获取字符串中的下一个单词。这会自动检查空格并返回下一个单词。然后,您可以使用String.replace(“标点符号”,“”)来删除标点符号,然后将这些单词插入到ArrayList中,您可以计算频率等。

Scanner reader = new Scanner(string);
String word = reader.nextWord();
word=word.replaceAll(//code);
list.add(word);

答案 1 :(得分:0)

您可以使用string.split()将字符串拆分为由空格分隔的字符串数组(对于您的单词。)您还可以使用Character.isLetterOrDigit()检查每个字符以避免标点符号。 (不一定按顺序。)

答案 2 :(得分:0)

如果使用一组字符,查找标点符号会有更好的表现。

Set<Character> punctationchars ....
if(punctationcahars.contains(yourChar) { ... }

答案 3 :(得分:0)

只需使用Scanner即可阅读String s:

Scanner in = new Scanner(...);

while (in.hasNext()) {
    String word = in.next();
    /* do something with the word, check punctuation, etc. */
}