1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み】java.util.NoSuchElementException: 行が見つかりません

2022-01-02 12:21:40

質問

スキャナでファイルを読み込んでいるときに、プログラムで実行時例外が発生しました。

while((str=sc.nextLine())!=null){
    i=0;
    if(str.equals("Locations"))
    {
        size=4;
        t=3;
        str=sc.nextLine();
        str=sc.nextLine();
    }
    if(str.equals("Professions"))
    {
        size=3;
        t=2;
        str=sc.nextLine();
        str=sc.nextLine();
    }
    if(str.equals("Individuals"))
    {
        size=4;
        t=4;
        str=sc.nextLine();
        str=sc.nextLine();
    }

int j=0;
String loc[]=new String[size];
while(j<size){
    beg=0;
    end=str.indexOf(',');
    if(end!=-1){
        tmp=str.substring(beg, end);
        beg=end+2;
    }
    if(end==-1)
    {
        tmp=str.substring(beg);
    }
    if(beg<str.length())
        str=str.substring(beg);
    loc[i]=tmp;
    i++;

    if(i==size ){
        if(t==3)
        {
            location.add(loc);
        }
        if(t==2)
        {
            profession.add(loc);
        }
        if(t==4)
        {
            individual.add(loc);
        }
        i=0;
    }
    j++;
    System.out.print("\n");
}

私のコードは

java.util.NoSuchElementException: No line found     
   at java.util.Scanner.nextLine(Unknown Source)    
   at Day1.ReadFile.read(ReadFile.java:49)  
   at Day1.ParseTree.main(ParseTree.java:17) 

解決方法は?

Scanner で次の行があるかどうかを確認する必要があります。 hasNextLine()

となり、ループは

while(sc.hasNextLine()){
    str=sc.nextLine();
    //...
}

でnullを返すのは読者です。 EOF

もちろん、このコードでは、入力が適切にフォーマットされているかどうかに依存します。