このようなものを試すことができます
public static String hide(String data, StringBuilder charactersToShow) {
return data.replaceAll("[^\\s" + charactersToShow.toString() + "]", "*");
}
public static void main(String[] args) throws Exception {
StringBuilder gueses = new StringBuilder();
String solution = "DOG PILE";
System.out.println(hide(solution, gueses));//
gueses.append('D');
System.out.println(hide(solution, gueses));
gueses.append('I');
System.out.println(hide(solution, gueses));
}
出力:
*** ****
D** ****
D** *I**
少し説明:
replaceAll
method は 2 つの引数を取ります:文字列のどの部分を置き換えるかを記述する正規表現と、2 番目の引数は置換です。そのメソッドの結果は新しい文字列になるため、元の文字列は変更されません。
正規表現として[]
、否定を含む文字のクラスを使用し[^...]
たため、このクラスにない任意の文字と一致します。最初に追加したユーザー文字に加え\\s
て、これはすべての空白 (通常の空白、タビュレーター、改行など) を表しているため、*
.
'
置き換えたくない場合は、その「セット」に追加することもできます。