2016-04-13 10 views
1

これは私が実装したコードですが、複数のデータ配列をインクリメンタルオーダーで取得していますが、データの配列が1つ必要です。どのように私はそれにアプローチするのですか?また、キャッチブロック内にキャッチしようとしていますか?テキストファイルからデータ型を分離する方法は?

Text File: 
    The 1493 fox 0.4 -6.382 jumped -832722 0 1 9E-21 162 over the dog! 

例:データが追加されるたびに倍の値が印刷されます。

@SuppressWarnings("resource") 
    Scanner s= new Scanner(new File("src/inputs.txt")).useDelimiter("\\s+"); 

    ArrayList<Long> itr= new ArrayList<Long>(); 
    ArrayList<Double> dub = new ArrayList<Double>(); 
    ArrayList<String> str = new ArrayList<String>(); 

    while(s.hasNext()) 
    { 
     String str1=s.next(); 
    try 
     { 
     long b=Long.parseLong(str1); 
     itr.add(b); 
     System.out.println("Integer values are ::"+itr);  
     } 
    catch(NumberFormatException e) 
    { 
     try 
     { 
     double b1=Double.parseDouble(str1); 
     dub.add(b1); 
     System.out.println("Double values are ::"+dub); 
     } 
     catch(NumberFormatException e1) 
     { 
      String b2 = (String) str1; 
      str.add(b2); 
      System.out.println("String Values are"+str); 
     } 
    } 
    } 
}} 

予想される出力:

Integer values are ::[1493, -832722, 0, 1] 
    Double values are ::[0.4, -6.382, 9.0E-21] 
    String Values are[The, fox, jumped, over, the, dog!] 
+0

@Bohemian Updated ..... – Box

+0

Arraylistをwhileループの外側に表示します。 – pikrut

+0

私は@pikrutに同意します。アルゴリズムの最後に3つのprintlnをwhileの外側に移動します。また、なぜ最初の型にIntegerの代わりにLongを使用していますか? – RubioRic

答えて

4

@RubioRicが答えたとおり、SOP文をwhileループの外側に移動して、目的の出力を取得します。

データ型を取得する他の方法については、実装が十分で広く使用されていると感じています。しかし、別の方法でそれをやりたい場合は正規表現パターンを使って文字列を検証し、データ型を決定してください(信頼性がない)またはScannerクラスAPIを使用して以下のようなデータ型を決定してください。

@SuppressWarnings("resource") 
     Scanner s= new Scanner(new File("src/inputs.txt")).useDelimiter("\\s+"); 

     ArrayList<Long> itr= new ArrayList<Long>(); 
     ArrayList<Double> dub = new ArrayList<Double>(); 
     ArrayList<String> str = new ArrayList<String>(); 

     while(s.hasNext()) 
     { 
      if(s.hasNextLong()){ 
       itr.add(s.nextLong()); 
      } 
      else if(s.hasNextDouble()){ 
       dub.add(s.nextDouble()); 
      } 
      else{ 
       str.add(s.next()); 
      } 
     } 
     s.close(); 
System.out.println("Long values are ::" + itr); 
System.out.println("Double values are ::" + dub);  
System.out.println("String Values are" + str); 
1

ただ、ループの外で印刷を動かします。 try-catchを使用せずに、より良い解決策を得ました、申し訳ありません。

@SuppressWarnings("resource") 
Scanner s= new Scanner(new File("src/inputs.txt")).useDelimiter("\\s+"); 

ArrayList<Long> itr = new ArrayList<Long>(); 
ArrayList<Double> dub = new ArrayList<Double>(); 
ArrayList<String> str = new ArrayList<String>(); 

while(s.hasNext()) { 
    String str1=s.next(); 

    try { 
     long b=Long.parseLong(str1); 
     itr.add(b); 

    } catch(NumberFormatException e) { 

     try { 
     double b1=Double.parseDouble(str1); 
     dub.add(b1); 
     } catch(NumberFormatException e1) { 
     String b2 = (String) str1; 
     str.add(b2); 
     } 
    } 
} 

System.out.println("Integer values are ::" + itr); 
System.out.println("Double values are ::" + dub);  
System.out.println("String Values are" + str); 
関連する問題