我一直试图从文件中读取输入并对其字符进行分类。在文本文件中打印多少个字符是大写字母,小写字母,数字,空格和其他内容。所以我一直在处理我的代码,但我遇到了两个问题。
当我尝试关闭扫描程序时,遇到java.lang.IllegalStateException:扫描程序已关闭。此外,我的代码产生了无限循环,但我已经看了几个小时,但我不知道什么是错的。我是Java的初学者,所以我还没有学习过hashmap或Buffered Readers。谢谢你的帮助。
这是我的代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class Characters
{
public static void main(String[] args) throws FileNotFoundException
{
Scanner console = new Scanner(System.in);
System.out.print("Input file: ");
String inputFileName = console.next();
Scanner in = new Scanner(new File(inputFileName));
while(in.hasNextLine())
{
String line = in.nextLine();
int len = line.length();
int uppercase = 0 ;
int lowercase = 0;
int digits = 0;
int whitespace = 0;
int other = 0;
for ( int i = 0 ; i < len ; i++)
{
char c = line.charAt(i);
if (Character.isLowerCase(c))
{
lowercase++;
}
else if (Character.isUpperCase(c))
{
uppercase++;
}
else if (Character.isDigit(c))
{
digits++;
}
else if (Character.isWhitespace(c))
{
whitespace++;
}
else
other++;
}
System.out.println("Uppercase: " + uppercase);
System.out.println("Lowercase: " + lowercase);
System.out.println("Digits: " + digits);
System.out.println("Whitespace: " + whitespace);
System.out.println("Other: " + other);
in.close();
}
}
}
答案 0 :(得分:3)
您应该使用try-with-resouces从while
循环中关闭扫描仪。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class Characters {
public static void main(String[] args) throws FileNotFoundException {
Scanner console = new Scanner(System.in);
System.out.print("Input file: ");
String inputFileName = console.next();
try (Scanner in = new Scanner(new File(inputFileName))) {
while (in.hasNextLine()) {
String line = in.nextLine();
int len = line.length();
int uppercase = 0;
int lowercase = 0;
int digits = 0;
int whitespace = 0;
int other = 0;
for (int i = 0; i < len; i++) {
char c = line.charAt(i);
if (Character.isLowerCase(c)) {
lowercase++;
} else if (Character.isUpperCase(c)) {
uppercase++;
} else if (Character.isDigit(c)) {
digits++;
} else if (Character.isWhitespace(c)) {
whitespace++;
} else
other++;
}
System.out.println("Uppercase: " + uppercase);
System.out.println("Lowercase: " + lowercase);
System.out.println("Digits: " + digits);
System.out.println("Whitespace: " + whitespace);
System.out.println("Other: " + other);
}
}
}
}
答案 1 :(得分:1)
使用完毕后应关闭扫描仪。该示例让您在循环结束时关闭,因此它会尝试在while条件中检查更多数据并失败。
尝试移动关闭,直到while循环退出。
答案 2 :(得分:1)
您似乎正在 while 循环中关闭扫描仪。你必须在循环外关闭它。您得到异常,因为在第一次循环迭代后,扫描仪关闭。