LoginSignup
1
2

More than 5 years have passed since last update.

enumで改行コードをまとめる

Posted at

はじめに

プログラムの処理結果をファイルに出力するときなど、実行環境のデフォルトの改行コード以外を指定する必要があることがあります。コマンドラインパラメータやプロパティファイルなどで「LF」「CRLF」などの記号で指定し、受け取ったプログラムでは指定された記号に応じた改行文字列「\n」「\n\r」に割り当てるような処理を書いていましたが、enumにまとめられることに気づきました。

実装したenum NewLine

enumデフォルトのvalueOf(String name)メソッドだと、指定されたnameに該当するものがないと

java.lang.IllegalArgumentException: No enum constant NewLine.XXX

のような例外が投げられるので、get(String name)メソッドを用意しました。

NewLine.java
public enum NewLine {
    CR("\r"),
    LF("\n"),
    CRLF("\r\n"),
    DEFAULT(System.lineSeparator());

    private final String value;

    private NewLine(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    static NewLine get(String name) {
        try {
            return valueOf(name);
        }
        catch (IllegalArgumentException | NullPointerException ignore) {}
        return DEFAULT;
    }
}

使用例

改行をプロパティに指定するイメージです。NewLine enumのどれかをプロパティに指定し、それをWriterのwriteメソッドで使うというサンプルです。

NewLineTest.java
public class NewLineTest {

    static Properties prop;

    @BeforeClass
    static public void init() {
        prop = new Properties();
        prop.setProperty("newline", "LF");
    }

    @Test
    public void test() throws Exception {

        NewLine EOL = NewLine.get(prop.getProperty("newline"));

        StringWriter writer = new StringWriter();
        writer.write("line");
        writer.write(EOL.getValue());

        System.out.print(writer);
    }
}

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2