java - 将 charAt() 处的名称替换为给定字符的星号字符串,但不替换所有星号,而仅替换其匹配的位置

标签 java

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/

相关文章:

java - 如何在Spring Boot中使用抽象类?

java - 在非 guice 类中注入(inject) guice 管理的依赖项

Java日历: getting time for the timezone

Java高效可序列化多对一映射

java - 从 CompletableFuture 调用 ExecutorService.shutdownNow

java - JavaFX-播放mp3

java - GZipOutputStream 和应用引擎

java - 如何从 jUnit 测试启动 Maven 过滤?

java - 对webhdfs的Http请求但给出FileNotFoundException

java - 如何监控 Kafka 消息的应用程序处理以进行负载测试