分裂一个字符串两次,但第二次我得到一个错误

时间:2014-12-19 18:20:47

标签: java string split

我需要将字符串拆分两次,以便在OWL文件上应用指标。第一次没关系,数组部分得到两个元素,但第二次数组firstDataSet为空,我得到了这个错误:线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:1。请帮忙吗?

String line;
    String[] parts = new String [4];
    String[] firstDataSet = new String [4];
    String[] secondDataSet = new String [4];
    double externalSameAsCounter = 0;
    double externalEdgeCounter = 0;
    double ratio = 0;

    try{
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        line = br.readLine();
        while ((line = br.readLine())!= null ){
            if(line.contains("->") && line.contains(".")){
                 parts = line.split("->");
                 firstDataSet = parts[0].split(".");
                 if(parts[1].contains("http")){
                    secondDataSet = parts[1].split(".");
                 }
                 if(((firstDataSet[1].toLowerCase()).contains(secondDataSet[1].toLowerCase()))){
                     externalEdgeCounter = externalEdgeCounter + 1;
                 }
            }
            if(line.contains("owl:sameAs")){
                 parts = line.split("->");
                 firstDataSet = parts[0].split(".");
                 secondDataSet = parts[1].split(".");
                 if(!((firstDataSet[1].toLowerCase()).contains(secondDataSet[1].toLowerCase()))){
                     externalSameAsCounter = externalSameAsCounter +1;
                 }
            }
        }
    }
    catch (FileNotFoundException ex){
        System.out.println(
            "Unable to open file");                
    }
    catch(IOException ex) {
        System.out.println(
            "Error reading file");  
    }
    ratio = (double)(externalSameAsCounter / externalEdgeCounter);
    return ratio;

2 个答案:

答案 0 :(得分:3)

在第二个if块中,您正在分割"->",但您无法保证字符串包含该子字符串,因为您检查的是字符串是否包含"owl:sameAs"

答案 1 :(得分:1)

当正则表达式时,.表示任何字符,如果您在.上拆分,它将无法满足您的期望。我建议尝试"[.]",这意味着.字面意思。