你可以试试这样的
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
方法有两个参数:描述字符串哪一部分应该被替换的正则表达式,第二个参数是替换。该方法的结果是新字符串,因此不会更改原始字符串。
作为正则表达式,我使用了[]
带否定的字符类,[^...]
因此它将匹配不在该类中的任何字符。除了我\\s
在开头添加的用户字符之外,因为它代表每个空格(普通空格、制表符、换行符等),因为您可能不想将它们替换为*
.
'
如果您不想替换它,您可能还想添加到该“集合”中。