2016-04-30 39 views
-2

非常に初心者からJavaです。私のプログラムは、2次元配列ではなく長い列を出力します。テストには10​​行20列のファイルを使用しますが、実際のファイルは20列と数千行になりますが、どれくらいの数があるのか​​わかりません。私はこのトピックについてはインターネット上で見つけることができるすべての記事を読んだが、まだプログラムを動作させることができなかった。何か案は?私はあなたがしたいと思うものを行い、短いプログラムの開発を書いたここでtxtファイルを2次元配列に読み込むjava

1 2 4 6 9 13 15 16 21 28 34 37 41 48 50 52 53 54 57 68 
6 7 10 17 23 24 27 28 31 39 42 43 46 48 50 55 60 61 67 70 
2 3 5 7 11 14 15 20 28 45 46 47 48 52 56 61 62 63 66 70 
4 5 7 11 13 15 19 23 24 27 28 35 38 40 48 50 57 58 64 66 
3 8 20 26 27 32 36 38 39 43 45 47 50 53 54 56 59 61 67 68 
1 3 5 7 15 19 26 30 31 36 41 44 48 49 56 58 59 60 61 65 
1 2 4 6 9 13 15 16 21 28 34 37 41 48 50 52 53 54 57 68 
6 7 10 17 23 24 27 28 31 39 42 43 46 48 50 55 60 61 67 70 
2 3 5 7 11 14 15 20 28 45 46 47 48 52 56 61 62 63 66 70 
4 5 7 11 13 15 19 23 24 27 28 35 38 40 48 50 57 58 64 66 

コード

try { 
    FileInputStream fstream = new FileInputStream("C:\\keno.txt"); 

    // Get the object of DataInputStream 
    DataInputStream in = new DataInputStream(fstream); 
    BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
    String strLine = ""; 
    String[] tokens; 

    //Read File Line By Line 
    int row = 0; 
    String userdata [][]= new String [10][21]; 
    while ((strLine = br.readLine()) != null) { 
     // Copy the content into the array 
     tokens = strLine.split(" +"); 
     for(int j = 0; j < tokens.length; j++) { 
      userdata[row][j] = tokens[j]; 
     } 
     row++; 
    } 
    for(int i = 0; i < userdata.length; i++) { 
     for(int j=0; j < userdata[i].length; j++){ 
      System.out.println(userdata[i][j]); 
     } 
    } 
    in.close(); 
} catch (Exception e) { 
    System.err.println("Error: " + e.getMessage()); 
} 
+0

''「任意のアイデア?」 - と戻ってくる、その後など、テキストファイルの読み込みテキストの行を解析し、配列を作成するなど、その小さなステップに大きな問題を打破し、これらのステップの1つに突き当たっているならば、はるかに具体的かつ答えられる質問。 ''私はこのトピックについてインターネット上で見つけることができるすべての投稿を読んだが、まだプログラムを稼働させることができなかった。 " - あなたのために働いていないことは、どのように助けてくれるの?あなたに関連コードと不正行為の説明を教えてください。この重要な情報が投稿されるまで、投票を閉じる –

+0

コード –

+0

[あなたはすでにこのサイトでこの質問をしています](http://stackoverflow.com/questions/36656388/processing-range-of-lines-in-a-2d-array-or-file) ! –

答えて

0


です。私のコードはまず、txtファイルからすべてのデータを文字列配列に抽出し、次に各文字列をセパレータ ""(スペース)で分割します。最後に文字列は長い形式に解析されています。これがあなたを助けることを望みます。
重要な注意:txtファイルのサイズは同じでなければなりません。つまり、最初の行に20個の要素がある場合は、各行に20個の要素が必要です。 AND:各行はスペースではなく要素で終わらなければなりません。これが役に立つかどうか、もし問題があった場合は、私に教えてください!
greetz

import java.io.*; 
import java.util.ArrayList; 

public class ReadFileInto2dArray{ 

    public static void main(String[] arg) throws FileNotFoundException, IOException, NumberFormatException { 

     // IMPORT DATA FROM TXT FILE AS STRINGARRAY 
     String filedirectory = "C:\\Users\\thomas\\Desktop\\Neuer Ordner\\keno.txt"; 
     BufferedReader b = new BufferedReader(new FileReader(filedirectory)); 
     String str=null; 
     ArrayList<String> lines = new ArrayList<String>(); 
     while((str = b.readLine()) != null){ 
      lines.add(str); 
     } 
     String[] strArr = lines.toArray(new String[lines.size()]); 
     b.close(); 

     // GET DIMENSIONS: number of rows  
     int nRows = strArr.length;                   
     // GET DIMENSIONS: number of elements in the first line 
     int nCols = (strArr[0].length()-strArr[0].replace(" ", "").length())+1;  

     // INITIALIZE LONG 2D ARRAY (MATRIX) 
     long[][] data = new long[nRows][nCols]; 

     // SPLIT EACH STRING OF ROW INTO SUBSTRING AND PARSE TO LONG FORMAT 
     String[] split = new String[nCols]; 
     for (int r=0; r<nRows; r++){ 
      split = strArr[r].split(" "); 
      for (int c=0; c<nCols; c++) { 
       data[r][c] = Long.parseLong(split[c]); 
      } 
     } 
     b.close(); 

     // SHOW THAT IT WORKED 
     System.out.println("first element: data[0][0] should be 1: " + data[0][0]); 
     System.out.println("last element data[9][19] should be 66: " + data[9][19]); 

    } 
} 
+0

それは私にエラー "例外"メイン "java.lang.NumberFormatException:入力文字列:" " – greuceanu

+0

といくつかの他のエラー:java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)で \t java .Lang.Long.parseLong(Long.java:601) \t(java.lang.Long.parseLong(Long.java:631))。Netbeansを使用していますか? – greuceanu

+0

私はeclipseを使用しましたが、間違いを発見しました。重要:あなたがmacを使用している場合、 "filedirectory"文字列は次のようにフォルダを区切らなければなりません。 "\\"の代わりに "/"を入力してください。今すぐうまくいきたいです。 – thomas

関連する問題