使用split()的异常输出

时间:2013-04-13 06:53:25

标签: java arrays split

我正在读取具有以下格式的文件: 姓名:症状:原因:治疗:发生率:预后

总共有21个条目,但是当我尝试从文件中读取并使用.split(“:”);时,输出每次都会更改,但始终沿着以下行:[Ljava.lang.String; @ 614951ff。我猜它是指针或内存地址,但我想要String值。我没有得到任何例外,所以我不确定我哪里出错了。该方法的目的是使用所选给定文件行的分隔符读取文件并拆分为数组。

public String[] readCancer(int row) {
    cancers = new String[22];
    FileInputStream fis;
    InputStreamReader isr;
    BufferedReader br = null;
    String eachCancer;
    String[] splitCancer = null;
    int j = 0;
    try {
        fis = new FileInputStream(myData);
        isr = new InputStreamReader(fis);
        br = new BufferedReader(isr);
        input = new Scanner(br);
        while(input.hasNext() && j < 23) {
            cancers[j++] = input.nextLine();
        }
        eachCancer = cancers[row].toString();
        splitCancer = eachCancer.split(":");
    } catch (IOException iox) {
        JOptionPane.showMessageDialog(null, "Problem with file input");
    } finally {
        try {
            if(br != null) {
                br.close();
            }
        } catch (IOException iox) {
            JOptionPane.showMessageDialog(null, "Problem closing the file");
        }
    }
    return splitCancer;
}

4 个答案:

答案 0 :(得分:2)

如果要显示字符串数组,则应use

System.out.println(Arrays.toString(splitCancer));

因为当您打印splitCancer时,您将获得数组的地址而不是其内容。

当然,您可以通过其他方式打印内容:

for(String str : splitCancer) {
   System.out.println(str);
}

答案 1 :(得分:2)

打印数组的内容:

1)System.out.println(Arrays.deepToString(splitCancer));

2)System.out.println(Arrays.toString(splitCancer));

3)System.out.println(Arrays.asList(splitCancer));

答案 2 :(得分:0)

目前我有以下内容:

public String[] readCancer() {
    cancers = new String[22];
    split = new String[22];
    FileInputStream fis;
    InputStreamReader isr;
    BufferedReader br = null;
    String eachCancer;
    int j = 0;
    try {
        fis = new FileInputStream(myData);
        isr = new InputStreamReader(fis);
        br = new BufferedReader(isr);
        input = new Scanner(br);
        while(input.hasNext() && j < 23) {
            cancers[j] = input.nextLine().toString();
            //cancers[j] = input.nextLine();
            split[j] = cancers[j].split(":");
            //split[j] = "blah";    this line works
            j++;
        }
        System.out.println(Arrays.toString(split));
    } catch (IOException iox) {
        JOptionPane.showMessageDialog(null, "Problem with file input");
    } finally {
        try {
            if(br != null) {
                br.close();
            }
        } catch (IOException iox) {
            JOptionPane.showMessageDialog(null, "Problem closing the file");
        }
    }
    return split;
    //return split[j]; does not work
}

在我的while循环中,我不断收到编译错误,说它需要一个字符串,但发现Stirng []用于拆分。当我尝试更简单的东西,比如split [j] =“blah”;时,没有编译错误。我可以完美地返回癌症,但我需要分开:分隔符,这似乎是我无法理解的东西。当我尝试返回split [j]时,我得到另一个编译错误,说它需要一个String []但是找到了String。我已经在这里工作了一个多小时,在我的教科书和在线教程中阅读使用拆分的示例,但它仍然无效。这是我的计划中唯一不确定如何做的部分。

答案 3 :(得分:0)

我尝试粘贴整个文件,但它出现了一个可怕的文本块,所以这里有2行。每行具有相同的格式但长度不同:

文件的一般格式是名称:症状:原因:治疗:率:预后

该比率是一个字符串,因为它对于某些疾病是未知的,并且当它已知时,该比率并不总是超过250,000。有时它超过1,000,000或100,000,等等。

急性早幼粒细胞白血病:容易瘀伤,内出血快,疲劳,贫血,经常发烧,感染,血栓:PML和RARA基因:药物,化疗:250,000中1:好

家族性圆柱菌病:多种皮肤肿瘤,溃疡,感染,视力受损,听觉,嗅觉,平衡:CYLD基因:手术,化疗:未知:未知

我最近的代码尝试位于Unusual output from using split()

2个癌症和拆分阵列是私有String [],作为在任何方法之外声明的字段变量。变量myData是一个私有文件,也被声明为任何方法之外的字段变量。我已经检查过并且已经验证了文件路径是否正确。

调用方法的主要方法:

public static void main(String[] args) {  
    CancerGUI _gui = new CancerGUI();
    String[] resultCancer;
    resultCancer = _gui.readCancer();
    //System.out.println(resultCancer);
    System.out.println(Arrays.toString(resultCancer));
}

我只是在main方法中调用它来测试它是否正确返回String []。一旦它完成,那么我将用一种不同的方法来调用它,将数据添加到GUI(这部分我有理由相信我知道该怎么做,并有我的教师和教科书中的例子)。