Java 替换字符串的单个字符

Java 替换字符串的单个字符,java,string,intellij-idea,Java,String,Intellij Idea,我试图只替换字符串中的一个字符。但是,每当该字符在字符串中多次出现时,所有这些字符都将被替换,而我只希望替换特定的字符。例如: String str = "hello world"; str = str.replace(str.charAt(2), Character.toUpperCase(str.charAt(2))); System.out.println(str); 给出了结果: heLLo worLd 虽然我希望它是: heLlo world 要实现此目标

我试图只替换字符串中的一个字符。但是,每当该字符在字符串中多次出现时,所有这些字符都将被替换,而我只希望替换特定的字符。例如:

    String str = "hello world";
    str = str.replace(str.charAt(2), Character.toUpperCase(str.charAt(2)));
    System.out.println(str);
给出了结果:

heLLo worLd
虽然我希望它是:

heLlo world

要实现此目标,我可以做些什么?

您应该使用
StringBuilder
而不是
String
来实现此目标

replace将不起作用,因为它将替换字符串中出现的所有内容。另外,replaceFirst将不起作用,因为它将始终删除 第一次发生

由于字符串是不可变的,所以无论哪种方式,您都需要始终创建一个新字符串。可以通过以下任一方法完成

  • 使用子字符串,并手动创建所需的字符串

    int place = 2;
    str = str.substring(0,place)+Character.toUpperCase(str.charAt(place))+str.substring(place+1);
    
  • 将字符串转换为字符数组,并使用索引替换所需的任何字符,然后将数组转换回字符串

replace(char,char)
将替换所有出现的指定的
char
,而不仅仅是索引处的char。从

返回一个新字符串,该字符串由newChar替换该字符串中所有出现的oldChar生成

你可以这样做

String str = "hello world";
String newStr = str.substring(0, 2) + Character.toUpperCase(str.charAt(2)) + str.substring(3);
这个代码也可以工作

     String str = "hello world";
     str = str.replaceFirst(String.valueOf(str.charAt(2)),
            String.valueOf(Character.toUpperCase(str.charAt(2))));
     System.out.println(str);

有关如何解决此问题的几种方法,请参见此链接:无效,因为位置1处的角色将消失。
     String str = "hello world";
     str = str.replaceFirst(String.valueOf(str.charAt(2)),
            String.valueOf(Character.toUpperCase(str.charAt(2))));
     System.out.println(str);