替换字符串的单个字符

时间:2016-03-05 16:39:32

标签: 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

我能做些什么来实现这个目标?

5 个答案:

答案 0 :(得分:0)

您应该使用StringBuilder代替String来实现此目标。

答案 1 :(得分:0)

  

替换将无效,因为它会替换字符串中的所有匹配项。此外, replaceFirst 将无法正常工作,因为它始终会删除   第一次出现。

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

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

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

答案 2 :(得分:0)

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

  

返回一个新字符串,该字符串是用newChar替换此字符串中所有出现的oldChar而生成的。

您可以执行类似

的操作
String str = "hello world";
String newStr = str.substring(0, 2) + Character.toUpperCase(str.charAt(2)) + str.substring(3);

答案 3 :(得分:0)

    String str = "hello world";
    char[] charArray = str.toCharArray();
    charArray[2] = Character.toUpperCase(charArray[2]);
    str = new String(charArray);
    System.out.println(str);

答案 4 :(得分:0)

此代码也适用

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