簡體   English   中英

輸出中超出范圍的異常,但運行我想要它執行的操作

[英]Out of bounds exception in output but runs what I want it to do

我的代碼是這樣的:

public static void main(String args[]) throws IOException
{
    String name;
    int population;
    String[] tokens;
    FileReader fin = new FileReader("Test.txt");

    Scanner src = new Scanner(fin);

    src.useDelimiter(",");

    while (src.hasNextLine())
    {
        if (src.hasNext())
        {
            tokens = src.nextLine().split(",\\s");
            name = tokens[0];
            population = Integer.parseInt(tokens[1].trim());
            System.out.printf("Name:%-15s  %-15d\n", name, population);
        } else
        {
            String str = src.next();
            if (str.equals(""))
            {
                break;
            } else
            {
                System.out.println("File format error.");
                return;
            }
        }
    }
    System.out.println("end");
    fin.close();
}

在我的測試文件中,我只有一個州名,后跟一個逗號,一個空格,總體,以及總體之后的隨機空格。 我的輸出結果為

.....名稱:弗吉尼亞州7100702
名稱:華盛頓5908684
名稱:西弗吉尼亞州1813077
名稱:威斯康星州5371210
名稱:懷俄明州495304
線程“主”中的異常java.lang.ArrayIndexOutOfBoundsException:javatesters.JavaTesters.main(JavaTesters.java:35)處為1 Java結果:1 BUILD SUCCESSFUL(總時間:0秒)

我的測試文件的結尾是

弗吉尼亞州7100702
華盛頓5908684
西維吉尼亞州1813077
威斯康星州5371210
懷俄明州495304

總分配人口281424177 435

我希望空白行指示文件的結尾

當掃描儀下降到不包含“,”的行時,該split(",\\\\s")調用會將其拆分為一個字符串。 因此,當您訪問tokens[1] ,您將超出數組的范圍。 有很多方法可以解決此問題。 一種方法(盡管不是最干凈的方法)是在使用tokens之前檢查以確保tokens具有兩個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM