0

以下のコードは、文字列のファイルから読み取り、「:」が見つかるまで各行を読み取り、その後すべてを保存して印刷する試みです。ただし、印刷機能は、ファイルから読み込んだすべてのものを印刷します。誰かが私が間違っているところを見つけることができますか?ありがとう

編集:すべての行はこの形式です「ここにいくつかのテキスト:ここにもっとテキスト」

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));
    }
    } 
4

1 に答える 1

4

結腸から逃げる必要はありません。

line.indexOf("\\:");

上記の行を次のように変更します。-

line.indexOf(":"); 

なぜなら、それはを検索し\\:、見つからない場合は値を返すからです-1

test = line.substring(indexOfComma+1); 

したがって、あなたindexCommaがである場合-1、これは確かになりますが、文字列に-が含まれていない場合\\:、上記の行は次のようになります。

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

提案として、リストを宣言するときの参照のタイプとして抽象型を使用する必要があります。したがって、宣言のLHSListではなくを使用する必要があります。-ArrayListList

List<String> vals = new ArrayList<String>();
于 2012-11-24T20:14:40.480 に答える