public class Main {
public static void main(String[] args) throws Exception {
String name = "eric";
String nameForYou = name.replaceAll(".","*");
String afterGuess="";
System.out.println("Guess my name: "+nameForYou+" "+name.length());
String yourguess = "c";
for (int i=0;i<name.length();i++) {
if ((yourguess.charAt(0) == name.charAt(i))){
afterGuess = nameForYou.replace(nameForYou.charAt(i),yourguess.charAt(0));
}
}
System.out.println(afterGuess);
}
}
我想要输出为:
Guess my name: **** 4
***c
我不希望它替换所有的“*”
最佳答案
您的策略不起作用,因为replace
会替换它找到的第一个字符,而该字符不一定是位于正确位置的字符。
由于 Java String
是不可变的,替换代码的更好方法应该是创建适当长度的 char
数组,并将其转换为 String
仅用于打印:
String name = "eric";
char[] nameForYou = name.replaceAll(".","*").toCharArray();
System.out.println("Guess my name: "+new String(nameForYou)+" "+name.length());
String yourguess = "c";
for (int i=0;i<name.length();i++) {
if ((yourguess.charAt(0) == name.charAt(i))){
nameForYou[i] = yourguess.charAt(0);
}
}
System.out.println(new String(nameForYou));
Java 数组是可变的,因此您可以直接控制特定索引处的字符。如果您不想直接处理数组,也可以使用 StringBuilder
。
关于java - 将 charAt() 处的名称替换为给定字符的星号字符串,但不替换所有星号,而仅替换其匹配的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49589423/