我有带有不同数据的.txt文件。所有这些数据分为3类。我需要为第一个数组获取一些数据,为第二个获取一些数据,为第三个获取另一个数据。这该怎么做?

.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();
            }
        }
    }
}

最佳答案

您应该在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;
    }
}

10-06 12:50