我正在尝试编写一种方法,使用Scanner读取文本文件,然后比较它们以查看它们是否为字符(' a' - ' z')但是二元运算符可以&# 39;使用(编译错误)。任何想法如何解决它?
我需要将大写字母转换为小写字母,并且我有一个计数器可以跟踪每个字母出现在文本文件中的次数。
我还需要忽略文本文件中的任何符号和数字。
阅读完评论后,我将代码更改为:
import java.util.Scanner;
public class LetterInventory {
int counter = 0;
private int[] inventory;
char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();
public LetterInventory () {
inventory = new int[26];
}
public void countOccurrences(Scanner file) {
while (file.hasNextLine()) {
// Read line by line and make it lowercase
String line = file.nextLine().toLowerCase();
// get all the character of the line
for (char c :line.toCharArray()) {
if (c >= 'a' && c <= 'z'){ // Check for character only
counter++;
}
}
}
}
public void displayTable () {
for (int i = 0; i < alphabet.length; i++) {
System.out.println(alphabet[i] + ": " + inventory[i]);
}
}
public void resetInventory () {
counter = 0;
}
我仍然不确定如何让这件事发挥作用。 该程序应该能够读取文本文件,对每个字母表进行读取计数,忽略任何符号/数字,并输出一个表格,每个字母后跟它们在文本文件中的次数。
答案 0 :(得分:0)
为什么不使用正则表达式,而不是将file.next()
与char
进行比较?
例如:
if(file.next().matches("[a-z]")){
//do something
}
如果下一个方法拾取的下一个值是a和z之间的小写字符,将返回true。这样您就不必处理不必要的逻辑,也不必担心是否要将String
与char
进行比较。
请注意: 我不确定你的输入是什么,并且上面的正则表达式只会匹配,如果它是一个小写字母而不是它是一个单词。如果您正在阅读单词,则需要在使用上述解决方案之前将它们拆分为字符数组。
举个例子,你可以尝试这样的事情:
while (file.hasNext()) {
// grabs next word/string from file
String str = file.next().toLowerCase();
// converts that string to a character array
char[] charArray = str.toCharArray();
for (char chars : charArray) {
// converts current character into a string and checks whether
// it
// is a lower case letter
if (String.valueOf(chars).matches("[a-z]")) {
// do something
}
}
}
答案 1 :(得分:0)
阅读内联评论以获取更多信息。
while (file.hasNextLine()) {
// Read line by line and make it lowercase
String line = file.nextLine().toLowerCase();
// get all the character of the line
for (char c : line.toCharArray()) {
if (c >= 'a' && c <= 'z'){ // check for character only
inventory[c - 'a']++; // Increment the occurrence of the Character
}
}
}
答案 2 :(得分:0)
正如评论中指出的那样,您的代码存在一些问题。 第一:每次调用file.next()时,它都会尝试读取下一个字符。所以你在循环中做的是:读取所有字符,转换为小写但忽略这个新值并继续。
编译问题是由于您尝试将字符串与字符进行比较。
你想要做的是这样的事情:
while(file.hasNext())
{
String currentTokes = file.next().toLowerCase(); //save the current token as lower text in the variable
//check each character of the string
for(char c : currentToken.toCharArray())
{
if(c <= ....) //check etc.
}
}
另一种方法是使用正则表达式。
答案 3 :(得分:0)
这将起作用
public void countOccurrences(Scanner file) {
int[] alpha = new int[25];
while (file.hasNext()) {
char[] stringTokens = file.next().toLowerCase().toCharArray();
for (char c : stringTokens) {
if (c - 'a' > -1 || c - 'a' < 26) {
alpha[c - 'a']++;
}
}
}
}