从texte中分割变量

时间:2011-04-21 22:59:32

标签: java textarea character

此方法运行异常,我找不到原因。

private void loadTrace () {
BufferedReader reader = new BufferedReader(
  new StringReader(logTextArea.getText()));



String str;


try {


while(reader != null)

{

      str =reader.readLine();

String [] splitted = str.split("\\|");

String b = splitted[1].trim();
String c = splitted[2].trim();
String d = splitted[3].trim();
String Chemin;
String Type = "action" ;
String Description;
if (d!=null) {
    Description=d;
}
 else Description ="Afficher onglet";
if (c!= null) {
Chemin= b+"."+c;
    }
 else Chemin =b;
String trace =Type+" "+Description +" "+Chemin ;

ArrayList<String> p = new ArrayList<String>();

p.add(trace);
System.out.println(p);


}


    }


      catch(IOException e) {
  e.printStackTrace();
     }
}

3 个答案:

答案 0 :(得分:2)

在不知道异常的情况下,我可以猜测其中一个潜在的问题是: -

String [] splitted = str.split("\\|");

String b = splitted[1].trim();
String c = splitted[2].trim();
String d = splitted[3].trim();

您正在访问splitted而不检查它是否为空或大小,因此如果splitted长度小于3,您可能会遇到ArrayIndexOutOfBound异常。所以以这种方式修改代码 -

String [] splitted = str.split("\\|");
    if(splitted!=null && splitted.length==3){
      String b = splitted[0].trim();
      String c = splitted[1].trim();
      String d = splitted[2].trim();
    }

答案 1 :(得分:2)

现在你已经修复了ArrayIndexOutOfBound的NullPointerException是因为你在while循环中使用的测试:

while(reader != null)
{
  ...
}

读者总是非空的,所以这个循环永远不会结束。你需要测试是否

reader.readLine()

返回null(表示EOF)。

答案 2 :(得分:1)

我猜你得到一个 ArrayIndexOutOfBoundException ,对吗? (你需要告诉我们,你收到的是什么异常)

问题可能在以下几行。您应该检查数组的大小,而不仅仅是“希望”它有三个部分。

String b = splitted[1].trim();
String c = splitted[2].trim();
String d = splitted[3].trim();