如何在 java 中使用 scanner 读取.txt文件时删除 inputMismatchException


import java.io.*;
import java.util.*;
public class FrequencyCount
{
    public static void main(String...args) throws IOException
    {
        int count0=0;
        int count1=0;
        int x=0;
        //System.out.println(new File(".").getCanonicalPath());
        Scanner scan=new Scanner(new File("F:\DUCAT COCHNG\java progs\IO\str.txt.txt"));
        while(scan.hasNext())
        {
            x=scan.nextInt();
            if(x==0)
                count0++;
            else if(x==1)
                count1++;
        }   
        System.out.println("Frequency of 0's is: "+count0);
        System.out.println("Frequency of 1's is: "+count1);
    }
}

显示的输出为:

F:\DUCAT COCHNG\java progs\IO>java FrequencyCount Exception in thread "main" java.util.InputMismatchException: 对于输入字符串: " 00000111010010011001010010100101010001000101110111110101010011101001001010010010 1" at java.util.Scanner.nextInt(Scanner.java:2165) at java.util.Scanner.nextInt(Scanner.java:2118) at FrequencyCount.main(FrequencyCount.java:15)

F:\DUCAT COCHNG\java progs\IO

>

str.txt 文件是:

000001110100100110010100101001010100010001011101111101010100111010010010100100101

我认为这可能会有所帮助:

try{
        Scanner scan = new Scanner(new File(filename));
        while (scan.hasNext())
        {
           String str = scan.next(); 
            char[] myChar = str.toCharArray();
            for(char c: myChar){
                x=Character.getNumericValue(c);
                if(x==0) 
                    count0++; 
                else if(x==1) 
                    count1++; 
            }
        }
       System.out.println("Frequency of 0's is: "+count0);
       System.out.println("Frequency of 1's is: "+count1);
   }
  catch(Exception e)
  { e.printStackTrace();}

你想用scan.hasNextInt()而不是scan.hasNext()。 后者检查是否有任何令牌,我怀疑您在扫描程序正在解析的文件末尾有一行新行。 这显然不能转换为整数,因此抛出异常。

您可能还想关闭scanner。 只需使用scan.close(). 在这样一个小程序中,这里不是绝对必要的,但很好的做法。

最新更新