2

私は、コードを可能な限り短くすることを目標の一部とするプロジェクトを持っています。できる限りコンパクトにするために考えられることはすべて実行しましたが、次のコードのショートカットが他にあるかどうか疑問に思っています

public static void read(String[] input) throws IOException {
    for (String s : input) {
        BufferedReader b = new BufferedReader(new FileReader(s)); 
        while (b.ready()) {
            String[] val = b.readLine().split(" ");
            for (String c : val) System.out.println(c);
        } 
        b.close();
    }   
}
4

2 に答える 2

4

「コンパクト」の意味によって異なります。たとえば、変更できます

String[] val = b.readLine().split(" ");
for (String c : val) System.out.println(c);

の中へ

for (String c : b.readLine().split(" ")) System.out.println(c);

または、クラスを使用して少し異なるアプローチを使用Scannerすると、コードが短くなり、読みやすくなります。

public static void read(String[] input) throws IOException {
    for (String s : input) {
        Scanner scanner = new Scanner(new File(s));
        while (scanner.hasNext()) 
            System.out.println(scanner.next());
        scanner.close();
    }
}

この方法を試すこともできます(Christian Friesの回答に基づくコンセプト)

public static void read(String[] input) throws IOException {
    for (String s : input) 
        System.out.println(new Scanner(new File(s)).useDelimiter("\\Z").next().replace(' ', '\n'));
}

ご覧のとおり、これはcloseスキャナーを許可しませんが、FileリソースはそうClosableではないため、そのメソッドを呼び出す必要がないcloseため、このアプローチは安全に見えます。

于 2013-11-04T20:55:36.917 に答える
1

を使用する代わりにsplit(" ")、for ループを使用して結果配列の各要素を 1 行に出力します。

System.out.println(b.readLine.replace(' ','\n'));

あれは

public static void read(String[] input) throws IOException {
    for (String s : input) {
        BufferedReader b = new BufferedReader(new FileReader(s)); 
        while (b.ready()) System.out.println(b.readLine.replace(' ','\n'));
        b.close();
    }   
}
于 2013-11-04T21:01:13.280 に答える