0

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

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

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

  1. 这是最好和最有效的方法吗?我正在寻找最有效的方法。一个
  2. 是否有完整的标点符号和特殊字符列表
4

4 回答 4

1

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

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

Scanner reader = new Scanner(string);
String word = reader.nextWord();
word=word.replaceAll(//code);
list.add(word);
于 2012-06-18T20:02:00.923 回答
0

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

于 2012-06-18T19:57:23.840 回答
0

如果您使用一组字符,则查找标点的性能会更好。

Set<Character> punctationchars ....
if(punctationcahars.contains(yourChar) { ... }
于 2012-06-18T20:00:32.733 回答
0

只需使用 aScannerStrings 中读取:

Scanner in = new Scanner(...);

while (in.hasNext()) {
    String word = in.next();
    /* do something with the word, check punctuation, etc. */
}
于 2012-06-18T20:01:02.937 回答