Есть некоторые проблемы с » useDelimiter («[, n]»); «. Как это можно исправить?

#java

#java

Вопрос:

 public void getConformFileDate(int year,int month,int date,int numOfday,int sr,int dr,int tr,int fr,int kr,int qr){
    
    String PIN = "" ; String check_in = ""; String NDates =""; String Rmonth = "" ; String Ryear = "" ;String people = "" ; String price = "" ;
    String single = "" ; String doub = ""; String triple =""; String fam = "" ; String king = "" ;String queen = "" ;
    
    try{
        x = new Scanner(new File(conf));
        x.useDelimiter("[,n]");
        
        while(x.hasNext()){
            PIN       = x.next();
            check_in  = x.next();
            NDates    = x.next();
            Rmonth    = x.next();
            Ryear     = x.next();
            people    = x.next();
            price     = x.next();
            single    = x.next();
            doub      = x.next();
            triple    = x.next();
            fam       = x.next();
            king      = x.next();
            queen     = x.next();
            
            checkWithConformFile(Ryear,Rmonth,check_in,NDates,year,month,date,numOfday,single,doub,triple,fam,king,queen,sr,dr,tr,fr,kr,qr);
            //sumcroom = sumcroom   croom;
        }
        
        x.close();
        
    }
    catch(Exception e){
        System.out.println(e);
    }
}
  

после того, как я преобразовал некоторые строковые значения (например, Rmonth, Ryear) в тип int и сравнил с моими входными значениями.
Если моего входного значения нет в моем текстовом файле, оно выдает истинный результат. Но мои входные значения находятся в моем текстовом файле, это выдает ошибку.

ошибка: «Исключение ava.lang.NumberFormatException: для входной строки: «3

мой текстовый файл:

000001,2,7,9,2020,1,8000,1,0,0,0,0 000002,1,5,9,2020,2,12000,1,1,0,0,0 000003,9,12,10,2020,5,26000,1,0,0,1,0,0 введите описание изображения здесь

Ответ №1:

Проблема:

В вашем коде (показано ниже) вы вызываете next() 13 раз для одного вызова x.hasNext() , и поэтому только первый вызов next() т.е. PIN = x.next(); Будет действительным, в то время как другие могут быть недействительными, потому x.hasNext() что для них не проверяется.

 while(x.hasNext()) {
      PIN       = x.next();
      check_in  = x.next();
      ...
      ...
      ...      
      checkWithConformFile(Ryear,Rmonth,check_in,NDates,year,month,date,numOfday,single,doub,triple,fam,king,queen,sr,dr,tr,fr,kr,qr);
  }
  

Решение:

Вам нужно вызывать x.hasNext() перед каждым вызовом next() , как показано ниже:

 while(x.hasNext()) {
      PIN       = x.next();
      if(x.hasNext()){
            check_in  = x.next();
      }   
      if(x.hasNext()){
            NDates    = x.next();
      } 
      ...
      ...
      ...
      checkWithConformFile(Ryear,Rmonth,check_in,NDates,year,month,date,numOfday,single,doub,triple,fam,king,queen,sr,dr,tr,fr,kr,qr);
}
  

Комментарии:

1. Большое спасибо, брат.

2. @ Арвинд Кумар Авинаш. Спасибо, брат. Я сделаю это.

Ответ №2:

Ваша строка не может быть преобразована в число. Если ваша строка равна «3, то она недопустима как целое число.