0

私はこれらの質問をたくさん経験しましたが、まだ理解できないようです. 行に分割されたテキスト ファイルがあります。各行は、"," で区切られた 5 つのデータで構成されます。このファイルを読み取って、情報を次の形式の文字列配列に分割しようとしています。

String [][] xyz = new String [5][100]; 

誰かが簡単な解決策で私を助けてくれませんか!? ありがとう!!!:)

データ例:

John,22,1953,Japan,Green
Anna,18,2012,Mexico,Blue
Sam,34,1976,San Francisco,Pink

サンプルコード:

public void readFile(){

    AssetManager manger;
    String line = null;

    try {
        manger = getAssets();
        InputStream is = manger.open("data.txt");
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        while ((line = br.readLine()) != null) {
            values.add(line.split(","));
            //System.out.print(value);

        }
        br.close();


        String[] array = values.toArray(new String[20];


    } catch (IOException e1) {
        Toast.makeText(getBaseContext(), "Problem!", Toast.LENGTH_SHORT).show();
    }
}

エラー

07-24 06:26:56.524: E/AndroidRuntime(27203): 致命的な例外: メイン 07-24 06:26:56.524: E/AndroidRuntime(27203): java.lang.ArrayIndexOutOfBoundsException: length=10; index=10 07-24 06:26:56.524: E/AndroidRuntime(27203): com.testingReadArray.weebly.testingReadArray.MainActivity.readFile(MainActivity.java:182) 07-24 06:26:56.524: E/AndroidRuntime (27203): com.testingReadArray.weebly.testingReadArray.MainActivity$planOnClickListener.onItemSelected(MainActivity.java:148) 07-24 06:26:56.524: E/AndroidRuntime(27203): android.widget.AdapterView.fireOnSelected( AdapterView.java:895) 07-24 06:26:56.524: E/AndroidRuntime(27203): android.widget.AdapterView.access$200(AdapterView.java:50) 07-24 06:26:56.524: E/AndroidRuntime (27203): android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:863) 07-24 06:26:56.524:

4

4 に答える 4

3

.split(',');BufferedReader を使用して各行を読み取り、メソッドを使用して行を分割できます。

擬似コード:

BufferedReader bfr = new BufferedReader(InputStreamReader/FileReader...);
String line = null;
int index = 0;
String [][] xyz = new String [100][5];

while ( (line = bfr.readLine()) != null) {
    if (index < xyz.length) xyz[index] = line.split(",");
    index++;
}   

これが役に立ったことを願っています!

于 2013-07-24T04:04:05.540 に答える
1

バッファリングされたリーダーを使用してファイルを 1 行ずつ読み取る例については、while ループで BufferedReader.readLine() を適切に使用するを参照してください。次に、これを Kon の回答と組み合わせると、解決策があると思います。

AssetManager manger;
String line = null;
List<String[]> xyzList = new ArrayList<String[]>();
String[][] xyz;  
InputStream is;
InputStreamReader isr;
BufferedReader br;
try {
    manger = getAssets();
    is = manager.open("data.txt");
    isr = new InputStreamReader(is);
    br = new BufferedReader(isr);
    while ((line = br.readLine()) != null) {
      xyzList.add(line.split(","));
    }
    xyz = (String[][])xyzList.toArray();
}catch (IOException e1) {
    Toast.makeText(getBaseContext(), "Problem!", Toast.LENGTH_SHORT).show();
}finally{
    br.close();
    isr.close();
    is.close();
}
于 2013-07-24T04:26:15.173 に答える
1

ファイルの読み取りの基本を理解していることを前提としています。それでは、 String が 1 つの完全な行に等しいところから始めましょう。

String s = "John,22,1953,Japan,Green";

次のように、split() 関数を呼び出して、式 (この場合はコンマ) で分割された s から配列を返すことができます。

String[] row = s.split(","); //Returns a new String array {John,22,1953,Japan,Green}

次に、row[0] = "John"、row[1] = 22 などがあります。これらの配列を使用して、必要に応じて多次元配列に格納するなど、好きなことを行うことができます。

String[][] xyz = new String[numRows][5];
xyz[0] = row;
System.out.println(xyz[0][0]); //prints "John"

うまくいけば、それは明らかであり、あなたが正しくやろうとしていることを理解しました.

于 2013-07-24T04:00:09.747 に答える