2011-07-29 17 views
1

整数を含むテキストファイルを読み込み、2次元配列に格納しようとしています。 問題が分裂しています。 私は読むことができます:ちょうど罰金と任意の番号0-9Androidでテキストファイルを読み込んで分割する

0 0 0 
0 1 0 
0 0 0 

を私は9(10、100、1000)を超える数字を持っています。私の方法 :

int[][] mapArray = new int[11][8]; 
    AndroidFileIO file = new AndroidFileIO(context.getAssets()); 
    InputStream is = null; 
    try { 
     is = file.readAsset("maps/map.txt"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     Log.d("android", "could not load file"); 
    } 
    Scanner scanner = new Scanner(is); 
    scanner.useDelimiter(","); 
    for (int i = 0; i < 11; i++) { 
     for (int j = 0; j < 8; j++) { 
      mapArray[i][j] = scanner.nextInt(); 
      Log.d("android", "" + mapArray[i][j]); 
     } 
    } 

だから私はそれがハングアップし、私は型の不一致を取得しています私に語った区切り文字を使用して試してみましたか? ファイルを読み込む際に整数を分割する方法はありますか?

+0

mapArray前にこのラインをIF(mScanner.hasNext())に置く[I] [J] = scanner.nextInt(); が動作している可能性もあります。 – ingsaurabh

+0

07-29 03:29:27.569:ERROR/AndroidRuntime(5933):致命的な例外:GLThread 10 07-29 03:29:27.569:ERROR/AndroidRuntime(5933):java.util .InputMismatchException 07-29 03:29:27.569:ERROR/AndroidRuntime(5933):java.util.Scanner.next(Scanner.java:1025) 07-29 03:29:27.569:ERROR/AndroidRuntime(5933) :java.util.Scanner.nextInt(Scanner.java:1373) 07-29 03:29:27.569:ERROR/AndroidRuntime(5933):java.util.Scanner.nextInt(Scanner.java:1337) – semajhan

+0

にあります私は上記のコメントで述べた方法を試しました – ingsaurabh

答えて

0
私の区切り文字としてこれを使用するために考え出した

scanner.useDelimiter("[\\s,\r\n]+"); 
0

ここでは、区切り記号として '、'を使用していますが、質問で言及した入力には数字の間にスペースがあります。したがって、scanner.nextInt()はスペース文字をintに変換しようとしているため、型の不一致が発生しています。

[EDIT]

その後、あなたの改行文字がscanner.nextInt()によって読み込まれています。 '\n' のチェックを追加し、文字を読むときは無視してください。あなたが番号を取得するために正規表現を使用することができます

+0

ファイルを実際には0,0,0,0,0,1,1,1のように変更してから新しい行と繰り返しを変更するようには思われません。私はそれが新しいラインと関係していると思っていますか? – semajhan

1

final Pattern PATTERN = Pattern.compile("(\\d+)"); 
final Matcher matcher = PATTERN.matcher(content); 
while (matcher.find()) { 
    final String numberAsString = matcher.group(0); 
    final Integer number = Integer.valueOf(numberAsString); 
    //do something with number 
} 
+0

私はパターンとマッチャーに精通しておらず、できる限り使用しているものに固執したいと思います。 – semajhan

+0

これは、正規表現に基づいてパターンをテキストで検索する単純で強力な方法です。 –

+0

テキストを読むときにこれを使うことができるようです。 – semajhan

0

あなたの目的に応じて、あなたは、文字列としてファイルに各行を読ん し、それを分割することができます。

String line = bufferedReader.readLine(); // line is something like "1 2 3" 
String[] row = line.split("\\s+");   // got array ["1", "2", "3"] 

次に、各配列要素を宛先配列にマップする方が簡単です。
整数値を取得するにはInteger.parseInt()が必要です。

+0

速度に大きな違いはありますか? – semajhan

+0

申し訳ありませんが、私はそれをテストしません。 Alex Answerは正規表現を一度コンパイルするので、彼のコードはより速くなるかもしれません。 – hanung

関連する問題