2013-07-24 2 views
0

나는 이러한 질문을 많이 겪었지만 아직도 그것을 알아낼 수 없습니다. 텍스트 파일을 행으로 나눕니다. 각 행은 ","로 구분 된 5 개의 데이터로 구성됩니다. 이 파일을 읽고이 형식의 문자열 배열로 정보를 나누려고합니다.텍스트 파일을 읽고 배열로 분할 - 안드로이드

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

간단한 솔루션으로 나를 도와 줄 수 있습니까? 감사!!! :)

데이터 예 :

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

샘플 코드 :

공공 무효에서 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 : E/AndroidRuntime (27203) : android.os.Handler. handleCallback (Handler.java:615) 07-24 06 : 26 : 56.524 : E/Andro idRuntime (27203) : android.os.Handler.dispatchMessage (Handler.java:92) 07-24 06 : 26 : 56.524 : E/AndroidRuntime (27203) : android.os.Looper.loop (Looper.java : 137) 07-24 06 : 26 : 56.524 : E/AndroidRuntime (27203) : android.app.ActivityThread.main (ActivityThread.java:4867) 07-24 06 : 26 : 56.524 : E/AndroidRuntime (27203) : java.lang.reflect.Method.invokeNative (네이티브 메소드) 07-24 06 : 26 : 56.524 : E/AndroidRuntime (27203) : java.lang.reflect.Method.invoke (Method.java:511)에서 07/24 06 : 26 : 56.524 : E/AndroidRuntime (27203) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1007) 07-24 06 : 26 : 56.524 : E/AndroidRuntime (27203) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:774) 07-24 06 : 26 : 56.524 : E/AndroidRuntime (27203) : at dalvik.system.NativeStart .main (기본 메소드)

+0

내 데이터의 예는 나오지 didnt한다. 각 색깔 후에 그것은 새로운 선이된다. .. 단지 하나의 공간이 아니다. :) – user2612948

+0

시작하려고했던 코드를 게시 할 수 있습니까? – Abubakkar

답변

3

BufferedReader를 사용하여 각 줄을 읽은 다음 .split(','); 메서드를 사용하여 줄을 분할 할 수 있습니다.

일부 의사 코드 :

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++; 
} 

희망이 도움이!

+0

IT는 "유형 불일치 : 문자열 []에서 문자열"wrt "로 변환 할 수 없다고 말합니다. xyz [index] = line.split (", ");" – user2612948

+0

선언 할 때 xyz [index]가 다차원 배열인지 확인하십시오. xyz [index]가 아닌 경우 String 배열이 아니라 String 배열을 반환합니다. – wdziemia

+0

예 ... 그렇습니다. 그리고 ive는 처음 10 개의 값을 읽으려고 모든 것을 감소 ​​시켰습니다 ... 일단 값을 읽고 표시하도록 요청하면 내 앱이 충돌합니다. :/ – user2612948

1

파일을 읽는 기본 사항을 알고 있다고 가정합니다. 당신은 어떤 식으로 세분화 s의 배열을 반환하는 분할() 함수를 호출 할 수 있습니다

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

(이 경우, 쉼표)와 같은 : 그럼 당신이 당신의 문자열의 동일한 하나 개의 전체 행이 어디에서 시작하자 그래서 :

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

그런 다음 행 [0] = "John", 행 [1] = 22 등이 있습니다. 이러한 배열을 사용하여 다차원 배열에 저장하는 것을 포함하여 원하는 모든 작업을 수행 할 수 있습니다.

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

분명히 분명하고 나는 당신이 올바르게하려고했는지 이해했습니다.

+0

그래, 그게 어떻게 작동하는지 이해합니다 ...하지만 파일에서 그것을 읽어서 어레이로 가져 오는 것은 그것이 나를 망쳐 놓는 곳입니다. 배열에 데이터를 가져 오면 조작 할 수 있지만 TXT 파일에서 배열로 가져 오는 것은 나를 죽이는 것입니다! Lol. :) – user2612948

0

버퍼링 된 판독기를 사용하여 한 줄씩 파일을 읽은 다음 Kon의 대답과 결합하여 해결 방법이 있다고 생각하면 Using BufferedReader.readLine() in a while loop properly을 참조하십시오. 그것은이 있어야로

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(); 
} 
0
/* Assuming you want a 5 by n matrix from this data 
John,22,1953,Japan,Green 
Anna,18,2012,Mexico,Blue 
Sam,34,1976,San Francisco,Pink 
. 
. 
. 
. 
nth row 

String[] row = s.split(","); */ 
for (int i = 0; i<n i++) 
{ 
    for(int j = 0; j<originalString.length; j++) 
    { 
     xyz[i] = originalString[j].split(","); 
    } 
} 
관련 문제