java - JAVA - 如何忽略所有包含非字母字母的单词
问题描述
我的程序使用 Scanner 读取 txt 文件,并使用 Scanner.next() 将其中的每个单词逐字保存在 ArrayList 中。在这里,任何包含非字母字母的单词都应该被忽略,意思根本不应该算作单词(而不是替换它们)。例如:“U2”、“基于数据”或“你好!” 根本不应该被计算在内。
我可以让它读取所有单词并将其保存到 ArrayList,但我坚持忽略包含非字母元素的单词。
这是我的部分代码:
public static void main(String[] args) {
ArrayList<Word> wordList = new ArrayList<Word>();
int wordCount = 0;
Scanner input;
try {
System.out.println("Enter the file name with extension: ");
input = new Scanner(System.in);
File file = new File(input.nextLine());
input.close();
input = new Scanner(file);
while(input.hasNext())
{
Word w = new Word(input.next().toLowerCase()); //should be case-insensitive
if(!wordList.contains(w)) //equals method overriden in Word class
wordList.add(w);
else
{
wordList.get(wordList.indexOf(w)).addCount();
}
wordCount++;
}
input.close();
Word 类是我定义的,只是一个简单的类,具有 word(String) 和 count(int) 属性。定义了 equals() 方法。
我认为正则表达式将是解决此问题的方法,但是由于我不确定如何在正则表达式中定义“非字母”(我不了解正则表达式),因此我无法定义固定范围..
任何帮助,将不胜感激!
解决方案
您可以使用正则表达式^[a-zA-Z]*$
仅匹配字母。在添加到您的ArrayList
.
现在您可以使用.matches()
String 类的 来检查它是否只包含字母。例如:
String str = "asd";
if (str.matches(^[a-zA-Z]*$)) {
// only alphabets
} else {
// something else
}
推荐阅读
- php - 为什么我的 Symfony 5 本地服务器将 HTTP 请求显示为文本而不是呈现的页面?
- regex - 正则表达式匹配字符串(谷歌分析)
- powershell - 将电子邮件附加到字符串中的单个单词
- powershell - 如何将对象转换为字符串?
- python - Python: TypeError: can't pickle module objects multiprocessing on Jupyter Notebook
- azure - 为用户 AAD B2C 设置 MFA 电话号码
- javascript - 如何从数组中捕获选定的列
- c# - 成员函数是内存结构的一部分吗?
- java - 使用 Java API 汇总镶木地板的数量
- stata - 如何对面板数据中的观察结果进行排名?