Notepad++ 字符串类的拆分方法未按预期工作

Notepad++ 字符串类的拆分方法未按预期工作,notepad++,java,android,string,file-io,Notepad++,Java,Android,String,File Io,我想从文件中逐行读取字符串 每行是由两个制表符分隔的两个整数,行尾是一个\n字符,如中所示 以下是我要从该文件中读取的代码: public void btnReadInSituValsCmprAct_click(View view){ String[] arr = new String[2]; String rejoinAfterSplit = ""; try { instream = new FileInputStream(mRcordFilePath

我想从文件中逐行读取字符串
每行是由两个制表符分隔的两个整数,行尾是一个
\n
字符,如中所示

以下是我要从该文件中读取的代码:

public void btnReadInSituValsCmprAct_click(View view){
    String[] arr = new String[2];
    String rejoinAfterSplit = "";
    try {
        instream = new FileInputStream(mRcordFilePath);
        if (instream != null) {
              // prepare the file for reading
              InputStreamReader inputreader = new InputStreamReader(instream);
              BufferedReader buffreader = new BufferedReader(inputreader);
              String line;
              // read every line of the file into the line-variable, on line at the time
              do {
                 line = buffreader.readLine();

                 // arr = line.split(" ");
                 arr = line.trim().split("\\s+");
                  rejoinAfterSplit += arr[0] +"\t\t" +  arr[1] + "\n";
                 // rejoinAfterSplit += line + "\n" ;
              } while (line != null);

              textViewMiscDispCmprAct.setText(rejoinAfterSplit);
              // textViewMiscDispCmprAct.setText("TEST");
        }

        instream.close();

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}       // btnReadInSituValsCmprAct_click       CLOSED
执行此函数时,我得到以下错误:

01-30 17:19:51.981: E/AndroidRuntime(14211): FATAL EXCEPTION: main
01-30 17:19:51.981: E/AndroidRuntime(14211): Process: com.example.fourcommandmenu, PID: 14211
01-30 17:19:51.981: E/AndroidRuntime(14211): java.lang.IllegalStateException: Could not execute method of the activity
01-30 17:19:51.981: E/AndroidRuntime(14211):    at android.view.View$1.onClick(View.java:3823)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at android.view.View.performClick(View.java:4438)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at android.view.View$PerformClick.run(View.java:18422)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at android.os.Handler.handleCallback(Handler.java:733)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at android.os.Looper.loop(Looper.java:136)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at android.app.ActivityThread.main(ActivityThread.java:5001)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at java.lang.reflect.Method.invokeNative(Native Method)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at java.lang.reflect.Method.invoke(Method.java:515)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at dalvik.system.NativeStart.main(Native Method)
01-30 17:19:51.981: E/AndroidRuntime(14211): Caused by: java.lang.reflect.InvocationTargetException
01-30 17:19:51.981: E/AndroidRuntime(14211):    at java.lang.reflect.Method.invokeNative(Native Method)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at java.lang.reflect.Method.invoke(Method.java:515)
01-30 17:19:51.981: E/AndroidRuntime(14211):    at android.view.View$1.onClick(View.java:3818)
01-30 17:19:51.981: E/AndroidRuntime(14211):    ... 11 more
01-30 17:19:51.981: E/AndroidRuntime(14211): Caused by: java.lang.NullPointerException
01-30 17:19:51.981: E/AndroidRuntime(14211):    at com.example.fourcommandmenu.CompressionActivity.btnReadInSituValsCmprAct_click(CompressionActivity.java:92)
01-30 17:19:51.981: E/AndroidRuntime(14211):    ... 14 more
主要错误是

01-30 17:19:51.981: E/AndroidRuntime(14211):    at android.view.View$1.onClick(View.java:3818)
01-30 17:19:51.981: E/AndroidRuntime(14211):    ... 11 more
01-30 17:19:51.981: E/AndroidRuntime(14211): Caused by: java.lang.NullPointerException
01-30 17:19:51.981: E/AndroidRuntime(14211):    at com.example.fourcommandmenu.CompressionActivity.btnReadInSituValsCmprAct_click(CompressionActivity.java:92)  
有问题的路线是

arr = line.trim().split("\\s+");  
我尝试过这行的变体,比如
arr=line.split(“”)并且它们不工作。我已经验证了程序,直到
line=buffreader.readLine(),按预期工作

我该如何解决这个问题?请帮忙。多谢各位

--EDIT1---

以下是更新后的函数:

public void btnReadInSituValsCmprAct_click(View view){
    String[] arr = new String[2];
    String rejoinAfterSplit = "";
    try {
        instream = new FileInputStream(mRcordFilePath);
        if (instream != null) {
              // prepare the file for reading
              InputStreamReader inputreader = new InputStreamReader(instream);
              BufferedReader buffreader = new BufferedReader(inputreader);
              String line ="";
              // read every line of the file into the line-variable, on line at the time

              /*
              do {
                 line = buffreader.readLine();

                  arr = line.split(" ");
                 // arr = line.split("\\t\\t");
                 // arr = line.trim().split("\\t\\t");
                  rejoinAfterSplit += arr[0] +"\t\t" +  arr[1] + "\n";
                 // rejoinAfterSplit += line + "\n" ;
              } while (line != null);
              */

              while (line != null){
                     line = buffreader.readLine();

                      arr = line.split(" ");
                     // arr = line.split("\\t\\t");
                     // arr = line.trim().split("\\t\\t");
                      rejoinAfterSplit = rejoinAfterSplit + (arr[0] +"\t\t" +  arr[1] + "\n");
                     // rejoinAfterSplit += line + "\n" ;

              }

              textViewMiscDispCmprAct.setText(rejoinAfterSplit);
              // textViewMiscDispCmprAct.setText("TEST");
        }

        instream.close();

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}       // btnReadInSituValsCmprAct_click       CLOSED

}       // CompressionActivity extends ActionBarActivity        CLOSED  
现在我得到一个ArrayIndexOutOfBounds错误:

01-30 17:39:03.661: E/AndroidRuntime(15324): FATAL EXCEPTION: main
01-30 17:39:03.661: E/AndroidRuntime(15324): Process: com.example.fourcommandmenu, PID: 15324
01-30 17:39:03.661: E/AndroidRuntime(15324): java.lang.IllegalStateException: Could not execute method of the activity
01-30 17:39:03.661: E/AndroidRuntime(15324):    at android.view.View$1.onClick(View.java:3823)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at android.view.View.performClick(View.java:4438)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at android.view.View$PerformClick.run(View.java:18422)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at android.os.Handler.handleCallback(Handler.java:733)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at android.os.Handler.dispatchMessage(Handler.java:95)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at android.os.Looper.loop(Looper.java:136)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at android.app.ActivityThread.main(ActivityThread.java:5001)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at java.lang.reflect.Method.invokeNative(Native Method)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at java.lang.reflect.Method.invoke(Method.java:515)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at dalvik.system.NativeStart.main(Native Method)
01-30 17:39:03.661: E/AndroidRuntime(15324): Caused by: java.lang.reflect.InvocationTargetException
01-30 17:39:03.661: E/AndroidRuntime(15324):    at java.lang.reflect.Method.invokeNative(Native Method)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at java.lang.reflect.Method.invoke(Method.java:515)
01-30 17:39:03.661: E/AndroidRuntime(15324):    at android.view.View$1.onClick(View.java:3818)
01-30 17:39:03.661: E/AndroidRuntime(15324):    ... 11 more
01-30 17:39:03.661: E/AndroidRuntime(15324): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
01-30 17:39:03.661: E/AndroidRuntime(15324):    at com.example.fourcommandmenu.CompressionActivity.btnReadInSituValsCmprAct_click(CompressionActivity.java:107)
01-30 17:39:03.661: E/AndroidRuntime(15324):    ... 14 more
数组索引错误位于第行

 rejoinAfterSplit = rejoinAfterSplit + (arr[0] +"\t\t" +  arr[1] + "\n");  
在Edit1之后的代码中

--EDIT2---

这是测试
line=buffreader.readLine()是否正确的代码工作正常

public void btnReadInSituValsCmprAct_click(View view){
    String[] arr = new String[2];
    String rejoinAfterSplit = "";
    int counter = 0;
    try {
        instream = new FileInputStream(mRcordFilePath);
        if (instream != null) {
              // prepare the file for reading
              InputStreamReader inputreader = new InputStreamReader(instream);
              BufferedReader buffreader = new BufferedReader(inputreader);
              String line ="";
              // read every line of the file into the line-variable, on line at the time

              // /*
              do {
                 line = buffreader.readLine();

                 // arr = line.split(" ");
                 // arr = line.split("\\t\\t");
                 // arr = line.trim().split("\\t\\t");
                 // rejoinAfterSplit += arr[0] +"\t\t" +  arr[1] + "\n";
                  rejoinAfterSplit += line + "\n" ;
              } while (line != null);
              // */

              textViewMiscDispCmprAct.setText(rejoinAfterSplit);
              // textViewMiscDispCmprAct.setText("TEST");
        }

        instream.close();

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}       // btnReadInSituValsCmprAct_click       CLOSED  
rejoinAfterSplit
的值可以看出
readline()
本身工作正常。但是,如果我取消注释下一行
arr=line.split(“”)该活动在此行因NullPointerException而崩溃。

使用以下代码:

do {
    line = buffreader.readLine();

    String[] arr = line.trim().split("\t\t");
    for (int i = 0; i < arr.length; i++) {
        rejoinAfterSplit += arr[i] + "\n";
    }
} while (line != null);
// */

textViewMiscDispCmprAct.setText(rejoinAfterSplit);
do{
line=buffreader.readLine();
字符串[]arr=line.trim().split(“\t\t”);
对于(int i=0;i
show about
split(\\t\\t”)我已验证
具有预期值
拆分(\\t\\t”)
给出了相同的
NullPointerException
问题发生在最后一行。这是一个做而循环。。。do在while之前执行。所以对于最后一行,
line!=null
为真,但随后,您再次读取do块中的下一行。。。使
为空。。。所以您得到了一个NullPointerException,它仍然不能像那样工作,因为即使通过while()测试,readline也可以将line设置为null。如果(行==null)中断,则添加;直接在readline调用之后,这如何避免出现
NullPointerException
?A
在这种情况下更好。您是否已将上述代码添加到您的应用程序中,它是否有效?添加到我的应用程序中?我不是OP。我也不需要测试这段代码来确定您没有在
line=buffreader.readLine()处处理返回的
null
行。