現在javaを勉強中です。
txt(String)ファイルを2次元配列で読み込みたいのですが、一行ずつの読み込みはうまくいくのですが、","で区切られた読み込みがなかなかうまくいきません。
他の方の質問などを調べて参考にしてはみたのですが、どうにもうまくいきません。
やりたいこととしては、
assetsフォルダにあるtxtファイル(","区切りの文字列)をStringで格納したいです。
ただ、txtファイルが複数有り、行列が4×5・10×3などと内容が違うため使い回しができるようにしたいのですが・・・
よろしくお願い致します。
追記:
説明不足で申し訳ありません。
一行ずつ出力できたのはこちらのコードになります。
InputStream is = null; BufferedReader br = null; String text = ""; try { try { is = this.getAssets().open("2-1.txt"); br = new BufferedReader(new InputStreamReader(is)); String str; while ((str = br.readLine()) != null) { text += str + "\n"; } } finally { if (is != null) is.close(); if (br != null) br.close(); } } catch (Exception e){ // エラー用の何かしらの処理 } Log.d("*************",text);
現在途中まで書いているコードがこちらになります。
String[][] nums; List<String> temp = new ArrayList<String>(); AssetManager as = getResources().getAssets(); try{ InputStream is = as.open("2-1.txt"); try (BufferedReader br = new BufferedReader(new InputStreamReader(is))){ String line; while((line = br.readLine()) != null){ temp.add(line); } //2-1.txt(9行4列) nums = new String[9][temp.size()]; for(int i = 0; i < temp.size(); i++){ String[] s = temp.get(i).split(", "); for(int j = 0; j < 9; j++){ nums[j][i] = String.valueOf(s[j]); } } for(int i = 0; i<nums.length; i++){ for(int j = 0; j<nums[0].length; j++){ System.out.println(nums[i][j]); Log.d("**************",nums[i][j]); } } } finally { if (is != null) is.close(); } }catch (IOException e){ e.printStackTrace(); }
どちらもほぼ他からコピペしたものです。
使い回しについては、
行や列の違う複数のtxtファイルをアドレスを変えても使用できるようにしたいと考えております。
追記02:
エラーコードの全文があったほうが良いとのことなので追記せさせていただきます。
02-04 09:30:14.994 5482-5482/com.example.kshinohara.uranai_01 E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.example.kshinohara.uranai_01, PID: 5482 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kshinohara.uranai_01/com.example.kshinohara.uranai_01.SeatActivity}: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2411) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1343) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5401) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615) Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at com.example.kshinohara.uranai_01.SeatActivity.onCreate(SeatActivity.java:71) at android.app.Activity.performCreate(Activity.java:6116) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1343) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5401) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:725) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:615)
追記:
71行目は
nums[j][i] = String.valueOf(s[j]);
の部分です。
回答3件
あなたの回答
tips
プレビュー