繁体   English   中英

读取文本文件并将其拆分为数组-Android

[英]Read and split text file into an array - Android

我已经解决了这些问题,但似乎仍然无法解决。 我有一个文本文件,分为几行。 每行包含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):at 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 / AndroidRuntime(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.Act ivityThread.main(ActivityThread.java:4867)07-24 06:26:56.524:E / AndroidRuntime(27203):at java.lang.reflect.Method.invokeNative(Native Method)07-24 06:26:56.524:E / AndroidRuntime(27203):at java.lang.reflect.Method.invoke(Method.java:511)07-24 06:26:56.524:E / AndroidRuntime(27203):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1007)07-24 06:26:56.524:E / AndroidRuntime(27203):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)07-24 06: 26:56.524:E / AndroidRuntime(27203):在dalvik.system.NativeStart.main(本机方法)

您可以使用BufferedReader读取每一行,然后使用.split(',');分割行.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++;
}   

希望这对您有所帮助!

我假设您了解通读文件的基础知识。 因此,让我们从String等于一整行开始:

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"

希望这很清楚,我了解您要正确执行的操作。

请参阅正确地在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();
}
/* 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(",");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM