1. 概要

この記事では、YAML文字列を複数行に分割する方法について学習します。

YAMLファイルを解析してテストするために、SnakeYAMLライブラリを利用します。

2. 複数行の文字列

始める前に、YAMLキーをファイルからStringに単純に読み取るメソッドを作成しましょう。

String parseYamlKey(String fileName, String key) {
    InputStream inputStream = this.getClass()
      .getClassLoader()
      .getResourceAsStream(fileName);
    Map<String, String> parsed = yaml.load(inputStream);
    return parsed.get(key);
}

次のサブセクションでは、文字列を複数の行に分割するためのいくつかの戦略について説明します。

また、YAMLがブロックの最初と最後にある空の行で表される先頭と終了の改行を処理する方法についても学習します。

3. リテラルスタイル

リテラル演算子は、パイプ(“ |”)記号で表されます。 改行を保持しますが、文字列の最後の空の行を1つの改行に減らします。

YAMLファイルliteral.yamlを見てみましょう。

key: |
  Line1
  Line2
  Line3

改行が保持されていることがわかります。

String key = parseYamlKey("literal.yaml", "key");
assertEquals("Line1\nLine2\nLine3", key);

次に、literal2.yamlを見てみましょう。いくつかの先頭と末尾の改行があります:

key: |


  Line1

  Line2

  Line3


...

1つに減らされた終了改行を除いて、すべての改行が存在することがわかります。

String key = parseYamlKey("literal2.yaml", "key");
assertEquals("\n\nLine1\n\nLine2\n\nLine3\n", key);

次に、ブロックチョッピングと、それによって改行の開始と終了をより細かく制御する方法について説明します。

2つのチョッピング方法(keepとstrip )を使用して、デフォルトの動作を変更できます。

3.1. 保つ

literal_keep.yaml でわかるように、Keepは「+」で表されます。

key: |+
  Line1
  Line2
  Line3


...

デフォルトの動作をオーバーライドすることにより、すべての終了する空の行が保持されることがわかります

String key = parseYamlKey("literal_keep.yaml", "key");
assertEquals("Line1\nLine2\nLine3\n\n", key);

3.2. ストリップ

literal_strip.yaml でわかるように、ストリップは「-」で表されます。

key: |-
  Line1
  Line2
  Line3

...

予想どおり、これにより、すべての終了空行が削除されます。

String key = parseYamlKey("literal_strip.yaml", "key");
assertEquals("Line1\nLine2\nLine3", key);

4. 折りたたんだスタイル

folded.yaml でわかるように、折りたたまれた演算子は「>」で表されます。

key: >
  Line1
  Line2
  Line3

デフォルトでは、連続する空でない行の改行はスペース文字に置き換えられます。

String key = parseYamlKey("folded.yaml", "key");
assertEquals("Line1 Line2 Line3", key);

同様のファイルfolded2.yamlを見てみましょう。このファイルには、いくつかの終了する空の行があります。

key: >
  Line1
  Line2


  Line3


...

空の行は保持されますが、終了改行も1に削減されていることがわかります。

String key = parseYamlKey("folded2.yaml", "key");
assertEquals("Line1 Line2\n\nLine3\n", key);

ブロックチョッピングは、リテラルスタイルと同じように折りたたみスタイルに影響を与えることに注意してください。

5. 引用

二重引用符と一重引用符を使用して文字列を分割する方法を簡単に見てみましょう。

5.1. 二重引用符

二重引用符を使用すると、「 \ n」を使用して複数行の文字列を簡単に作成できます。

key: "Line1\nLine2\nLine3"
String key = parseYamlKey("plain_double_quotes.yaml", "key");
assertEquals("Line1\nLine2\nLine3", key);

5.2. 一重引用符

一方、一重引用符は「 \ n 」を文字列の一部として扱うため、改行を挿入する唯一の方法は空の行を使用することです。

key: 'Line1\nLine2

  Line3'
String key = parseYamlKey("plain_single_quotes.yaml", "key");
assertEquals("Line1\\nLine2\nLine3", key);

6. 結論

このクイックチュートリアルでは、YAML文字列を複数行に分割する複数の方法を、すばやく実用的な例で見てきました。

いつものように、コードはGitHubから入手できます。