Javaで不可視文字を文字列に挿入する方法

Javaでは、文字列中に視覚的に表示されない文字(不可視文字)を挿入することで、出力の整形や特殊な処理を実現できます。代表的な不可視文字にはタブ(U+0009)、改行(U+000A)、ゼロ幅スペース(U+200B)などがあります。これらの文字は、コードの可読性を高めたり、データの埋め込みやフィルタリング対策に利用されます。

1. エスケープシーケンスによる挿入

Javaでは、標準のエスケープシーケンスを使用して基本的な不可視文字を直接記述できます。

public class InvisibleTextExample {
    public static void main(String[] args) {
        String formattedText = "項目1\t項目2\n項目3\t項目4";
        System.out.println(formattedText);
    }
}

上記コードでは、\tがタブ文字、\nが改行文字として機能し、出力時に視覚的に空白や改行として反映されます。

2. Unicodeコードによる明示的指定

エスケープシーケンスでは対応できない特殊な不可視文字は、Unicodeの十六進表記で指定します。形式は\uXXXXです。

public class UnicodeInvisibleExample {
    public static void main(String[] args) {
        String hiddenSeparator = "データ\u200B分割\u200Bポイント";
        String zeroWidthSpace = "\u200B"; // ゼロ幅スペース
        String tabUnicode = "\u0009";     // タブ文字(\tと同等)

        System.out.println("元文字列: " + hiddenSeparator);
        System.out.println("長さ: " + hiddenSeparator.length()); // ゼロ幅スペースも文字数にカウント
    }
}

この例では、\u200B(ゼロ幅スペース)を挿入しても、表示上は影響がなく、文字列長には含まれるため、文字列操作や検証に有用です。

3. カスタム不可視文字の生成

必要に応じて、動的に不可視文字を組み合わせて使用することも可能です。

import java.util.ArrayList;
import java.util.List;

public class DynamicInvisibleBuilder {
    public static void main(String[] args) {
        List<String> segments = List.of("ユーザーA", "ユーザーB", "ユーザーC");
        String separator = "\u200B\u0009\u200B"; // ゼロ幅スペース+タブ+ゼロ幅スペース
        
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < segments.size(); i++) {
            result.append(segments.get(i));
            if (i < segments.size() - 1) {
                result.append(separator);
            }
        }
        
        String output = result.toString();
        System.out.println("出力: \"" + output + "\"");
        System.out.println("文字列長: " + output.length()); // 15文字(不可視文字含む)
    }
}

この構造では、不可視文字の組み合わせにより、外部システムやツールとの互換性を保ちながら、人間には見えない区切りを実装できます。

タグ: Java Unicode エスケープシーケンス ゼロ幅スペース 不可視文字

7月4日 20:49 投稿