2017-03-05 43 views
0

我有.txt文件與不同的數據。所有這些數據組織爲3類。我需要獲得第一陣列的一些數據,第二陣列和第三陣列的數據。這個怎麼做?解析.txt文件到不同的陣列

.txt文件中包含部分X,空的空間和#(從第二和第三類單獨的文本)

part 1 
some data for 1st array 

part 2 
some data for 2nd array#some data for 3rd array 

part 3 
some data for 1st array 

part 4 
some data for 2nd array#some data for 3rd array 

與此同時,我需要從每個類別收集數據:從 部分1和3,從第2和第4部分開始#

現在我被卡住了,我的代碼需要所有數據,我不知道接下來應該做什麼。

public class MainActivity extends AppCompatActivity { 

    TextView textView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     textView = (TextView) findViewById(R.id.text1); 
     textView.setMovementMethod(new ScrollingMovementMethod()); 
     String data = ""; 
     StringBuffer sBuffer = new StringBuffer(); 
     InputStream is = this.getResources().openRawResource(R.raw.phrases); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 

     if (is!= null){ 
      try { 
       while ((data=reader.readLine()) !=null){ 
        sBuffer.append(data + "\n"); 
       } 
       textView.setText(sBuffer); 
       is.close(); 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+1

你的問題是不完整的,你的文件格式規格是什麼 – Mehdi

+0

你的文件是否真的包含'partX'和空行?也就目前而言,它看起來像只讀取了StringBuffer的每一行,但我們仍然不知道什麼阻止你將這些行(或分裂後的部分行)放入數組中。 – Pshemo

回答

1

你應該在你的while循環裏面添加你的解析邏輯,你每次迭代讀一行。

你可以做這樣的事情你的循環中:

String[] parsedData = new String[3]; 
int parsingBlock = -1; 
while ((data=reader.readLine()) !=null) { 
    if (parsingBlock >= 0) { 
     switch (parsingBlock) { 
      case 0: parsedData[0] = data; break; 
      case 1: { 
       String [] part2Data = data.split("#"); 
       parsedData[1] = part2Data[0]; 
       parsedData[2] = part2Data[1]; 
       break; 
      } 
      case 2: parsedData[0] = parsedData[0] + data; break; 
      case 3: { 
       String [] part4Data = data.split("#"); 
       parsedData[1] = parsedData[1] + part4Data[0]; 
       parsedData[2] = parsedData[2] + part4Data[1]; 
      } 
      default: break; 
     } 
    } 
    parsingBlock = -1; 
    if (data.equals("part 1")) { 
     parsingBlock = 0; 
    } else if (data.equals("part 2")) { 
     parsingBlock = 1; 
    } else if (data.equals("part 3")) { 
     parsingBlock = 2; 
    } else if (data.equals("part 4")) { 
     parsingBlock = 3; 
    } 
} 
1

下面是一個使用StringBuffer的內容做一個辦法:

List<String> arr1 = new ArrayList<>(); 
List<String> arr2 = new ArrayList<>(); 
List<String> arr3 = new ArrayList<>(); 
Pattern p = Pattern.compile("part \\d+\\n(.*)\\n+part \\d+\\n(.*)#(.*)"); 
Matcher m = p.matcher(sBuffer); 
while(m.find()) { 
    arr1.add(m.group(1)); 
    arr2.add(m.group(2)); 
    arr3.add(m.group(3)); 
} 

注:在上面的代碼,我有爲了方便,使用了ArrayLists而不是數組。但是,您可以使用myList.toArray(new String[0])List<String>輕鬆轉換爲String[]陣列。