0

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

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

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

4 回答 4

2

如果要显示字符串数组,应使用

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

因为当你打印时splitCancer你会得到数组的地址而不是它的内容。

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

for(String str : splitCancer) {
   System.out.println(str);
}
于 2013-04-13T06:59:38.280 回答
2

要打印数组的内容:

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

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

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

于 2013-04-13T07:06:20.573 回答
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。我已经在这里待了一个多小时,阅读了我的教科书和在线教程中的示例以使用拆分,但它仍然无法正常工作。这是我的程序中唯一我不知道该怎么做的部分。

于 2013-04-13T16:24:18.287 回答
0

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

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

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

急性早幼粒细胞白血病:容易瘀伤、快速内出血、疲劳、贫血、频繁发烧、感染、血栓:PML 和 RARA 基因:药物、化疗:250,000 分之一:好

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

我最近的代码尝试是使用 split() 的 Unusual output

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

调用方法的main方法:

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(这部分我有理由相信我知道如何去做,并且有来自我的导师和教科书的示例)。

于 2013-04-13T17:43:11.593 回答