【问题标题】:ArrayList confusionArrayList 混淆
【发布时间】:2012-11-12 18:24:33
【问题描述】:

下面的代码是我尝试从字符串文件中读取,通读每一行直到找到':',然后存储+打印之后的所有内容。但是,打印功能会打印出我从文件中读取的所有内容。有人能发现我哪里出错了吗?谢谢

编辑:每一行都是这种格式“这里有一些文字:这里有更多文字”

public void openFile() {

        try {
            scanner = new BufferedReader(new FileReader("calendar.ics"));
        } catch (Exception e) {
            System.out.println("Could not open file");

        }

    }

    public void readFile() {
        ArrayList<String> vals = new ArrayList<String>();
        String test;

        try {
        while ((line = scanner.readLine()) != null)
        {

        int indexOfComma = line.indexOf("\\:"); // returns firstIndexOf ':'
        test = line.substring(indexOfComma+1);  // test to be everything after ':'
        vals.add(test);  // add values to vals
        }
        }  catch(Exception ex){ }

            for(int i=0; i<vals.size(); i++){
         System.out.println(vals.get(i));
    }
    } 

【问题讨论】:

    标签: java string list arraylist java.util.scanner


    【解决方案1】:

    你不需要逃避你的冒号。

    line.indexOf("\\:");
    

    将上面的行改为:-

    line.indexOf(":"); 
    

    因为,它将搜索\\:,如果没有找到返回值-1

    test = line.substring(indexOfComma+1); 
    

    所以,如果你的indexComma-1,那肯定是,如果你的字符串不包含-\\:,那么你上面的行变成:-

    line.substring(0);  // same as whole string
    

    作为建议,您应该在声明列表时将抽象类型作为引用类型。因此,您应该在 List 声明的 LHS 上使用 List 而不是 ArrayList:-

    List<String> vals = new ArrayList<String>();
    

    【讨论】:

    • 谢谢你完美的工作,我真的应该知道这一点。 +1
    • @shanahobo86.. 实际上并不是你从一开始就知道的一切。时间一到,你就会自动知道。不过不客气:)
    • 确实如此。有时我对自己没有发现这些错误并来 StackOverFlow 寻求帮助而生气。我试着提醒自己这是一个学习曲线,也许有一天我会回答问题而不是提问 :-) 感谢您的意见
    • @shanahobo86 .. 是的。我喜欢你的自信。祝你好运。并享受编码。我希望有一天能看到你在 SO 上给出很好的答案。 :)
    • 另一种选择是在“:”上使用拆分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2014-05-06
    • 2015-02-02
    相关资源
    最近更新 更多