2017-12-23 10 views
0

初めてのポスター。arraylistsに追加するテキストファイルのエントリを分割する

私はいつもこのサイトを使用していますが、現在は問題の解決策を見つけることができませんので、質問してみます。申し訳ありませんが、回避するのが簡単かもしれませんが、今数時間試しています。私は以下のリストのテキストファイルだ

1,John,Spiteri,99845124,10/05/2018,2 
2,Kate,Galea,79451245,10/05/2018,4,Highchair required 
1,Peter,Zahra,79845731,21/07/2018,3 
3,Alice,Carabott,99468791,10/05/2018,10 
4,James,Dingli,99364125,10/05/2018,15,Birthday 
2,Kim,Fenech,99871632,21/07/2018,4,Cake Ordered 
5,George,Pace,79541247,10/05/2018,2,Vegetarian Menu 
3,Jack,Vella,99451785,21/07/2018,2 

を、私はそれ自身のArrayListにそれぞれ固有の値を格納する必要があります。これは簡単です。コンマで区切られたデータを保持する変数を使用して、拡張されたforloopを実行してください。各行はそれ自身の予約です。コメントはオプションであるため、すべてがコメントではありません。これは、私が手作業でチェックしなければならないように分割を使用し、何もない場合は、arraylistに空の文字列値を追加します。

私の考え(悪いかもしれない)は、7までカウントされた変数を使用して、各arraylistに特定の値を追加するようにリセットしました。しかし、私は最初の行の最後の値に達したときに問題があります。何らかの理由で、数値2に達すると、それが別々に表示されているにもかかわらず、NumberFormatExceptionというエラーが発生します。また、コメントがあるかどうかを確認するif文も動作していません。

私は以下の方法を掲載します。手を貸せる人がいたら、私はそれを感謝します:)私はただの説明に気をつけません、私はここでチートしないことを学ぶためにここにいます。ありがとう。

ArrayList<Integer> tableNumbers = new ArrayList<>(); 
ArrayList<String> names = new ArrayList<>(); 
ArrayList<String> surnames = new ArrayList<>(); 
ArrayList<String> contacts = new ArrayList<>(); 
ArrayList<String> dates = new ArrayList<>(); // To be changed!!! 
ArrayList<Integer> quantities = new ArrayList<>(); 
ArrayList<String> comments = new ArrayList<>(); 

int counter = 0; 
String[] bookList = bookings.split(","); 

for(String element: bookList){ 
    counter++; 
    System.out.println(element); 

    if(counter == 1) 
     tableNumbers.add(Integer.parseInt(element)); 
    if(counter == 2) 
     names.add(element); 
    if(counter == 3) 
     surnames.add(element); 
    if(counter == 4) 
     contacts.add(element); 
    if(counter == 5) 
     dates.add(element); 
    if(counter == 6) 
     quantities.add(Integer.parseInt(element)); // Line 86 
    if(counter == 7){ 
     char comment = element.charAt(0); 

     if(element.length() < 2 && Character.isDigit(comment)){ 
      comments.add(" "); 
      tableNumbers.add(Integer.parseInt(element)); 
      counter = 1; 
     }  
     else { 
      comments.add(element); 
      counter = 0; 
     } 
    } 
} 

エラーメッセージ:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "2 
2" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
     at java.lang.Integer.parseInt(Integer.java:580) 
     at java.lang.Integer.parseInt(Integer.java:615) 
     at bistronomic.restaurant.Main.loadBookings(Main.java:86) 
     at bistronomic.restaurant.Main.<init>(Main.java:108) 
     at bistronomic.restaurant.Main$7.run(Main.java:387) 
     at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) 
     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) 
     at java.awt.EventQueue.access$500(EventQueue.java:97) 
     at java.awt.EventQueue$3.run(EventQueue.java:709) 
     at java.awt.EventQueue$3.run(EventQueue.java:703) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 
+0

質問を編集して、変数名、連絡先、日付などの宣言を含めることはできますか? – Keara

+0

arrylist初期化を追加しました。 – Doomsayer

+0

素晴らしい!ありがとう。エラーがtableNumbers.add(...)行にスローされていないことを確かめますか?エラーメッセージ全体を投稿して、正確にどの行が参照されているかを示すことができます。 – Keara

答えて

0
public void loadBookings() { 

    String bookings = FileIO.readTextFile("bookings.txt"); 
    //GregorianCalendar cal1; 
    //SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
    int counter = 0; 
    String[] bookList = bookings.split(","); 

    for (String element : bookList) { 
     counter++; 
     System.out.println("Element to be persed:" + element); 

     if (counter == 1) { 
      tableNumbers.add(Integer.parseInt(element.trim())); 
     } else if (counter == 2) { 
      names.add(element); 
     } else if (counter == 3) { 
      surnames.add(element); 
     } else if (counter == 4) { 
      contacts.add(element); 
     } else if (counter == 5) { 
      dates.add(element); 
     } else if (counter == 6 || counter == 7) { 

      if (element.contains("\n")) { 
       String thisLineLastElement = ""; 
       String nextLineFirstElement = ""; 

       if (element.endsWith("\n")) { 
        thisLineLastElement = element.trim(); 
       } else { 
        String[] split = element.split("\n"); 
        thisLineLastElement = split[0]; 
        nextLineFirstElement = split[1]; 
       } 

       if (counter == 6) { 
        quantities.add(Integer.parseInt(thisLineLastElement.trim())); 
        comments.add("N/a"); 

       } else if (counter == 7) { 
        comments.add(thisLineLastElement); 
       } 
       if (!element.endsWith("\n")) { 
        tableNumbers.add(Integer.parseInt(nextLineFirstElement.trim())); 
       } 
       counter = 1; 
      } 

      if (counter == 6) { 
       quantities.add(Integer.parseInt(element.trim())); 
      } 

     } 

    } 
} 

chech this out。

+0

こんにちはRJMIMI38、私を許しますが、あなたのソリューションを編集することができますか?どうやらこのページについていくつかの学生が知り、誰かが先生に語ったようです。 彼らは私に質問を完全に取り除くように頼んだが、私はそれで十分ではない。 ありがとうと申し訳ありません。 – Doomsayer

+0

Dodmsayer投稿を削除する方が良いでしょう。答えを編集するのは誤解を招きます。おかげで – RJMIMI38

+0

悲しいことに私はできません。特定の回答と私の主な質問には賛否があります。 – Doomsayer

0

ではなく、これを試してみてください。

if(counter == 6)
quantity.add(Integer.parseInt(element.trim()));

+0

それで解決できませんでした。同じエラー。 – Doomsayer

+0

出力を表示してください – RJMIMI38

+0

最初の投稿にエラーメッセージが追加されました。 – Doomsayer

1

私が正しく質問を理解すれば、これは問題

import java.io.BufferedReader; 
 
import java.io.FileReader; 
 
import java.io.IOException; 
 
import java.util.ArrayList; 
 

 
public class Demo { 
 

 
    public static void main(String[] args) throws IOException { 
 

 
     ArrayList<Integer> tableNumbers = new ArrayList<>(); 
 
     ArrayList<String> names = new ArrayList<>(); 
 
     ArrayList<String> surnames = new ArrayList<>(); 
 
     ArrayList<String> contacts = new ArrayList<>(); 
 
     ArrayList<String> dates = new ArrayList<>(); // To be changed!!! 
 
     ArrayList<Integer> quantities = new ArrayList<>(); 
 
     ArrayList<String> comments = new ArrayList<>(); 
 

 
     try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) { 
 
      String line; 
 
      while ((line = br.readLine()) != null) { // till here each line alone 
 

 
       String dataEachLine[] = line.split(","); 
 

 
       tableNumbers.add(Integer.parseInt(dataEachLine[0])); 
 
       names.add(dataEachLine[1]); 
 
       surnames.add(dataEachLine[2]); 
 
       contacts.add(dataEachLine[3]); 
 
       dates.add(dataEachLine[4]); 
 
       quantities.add(Integer.parseInt(dataEachLine[5])); 
 
       if (dataEachLine.length > 6) { 
 
        comments.add(dataEachLine[6]); 
 

 
       } 
 
      } 
 
     } 
 
    } 
 

 

 
}

を解決する必要があり、[]私はちょうどそれが簡単にあなたが文字列へのファイルアクセスを変更することができますアクセスするために作成することができ、ループの方法を変更するには、このを試してみてください
+0

私は現在、テキストファイルを扱う別のスクリプトを呼び出しています。私はそれを確認しますタフ、ありがとう! :) – Doomsayer

+0

あなたは歓迎です^ _^ –

関連する問題