Java:比较并替换字符串中的char

时间:2019-04-13 10:54:27

标签: java

我想从用户那里得到一个字符串。遍历所有字符,并检查是否包含任何“ a”。如果是这样,请用“ 9”替换那些“ a”字符。

我收到以下错误:"Incompatible operand types char and String"

我该如何解决?

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Type a string");
        String t = in.nextLine();

        for(int i = 0; i < t.length(); i++) {
            if(t.charAt(i) == "a") { // ERROR HERE
                t.charAt(i) = "9"; //HOW ASSIGN NEW CHAR?
            };
        }
    }

2 个答案:

答案 0 :(得分:3)

两件事:

  1. char文字是用'而不是"编写的(" string 文字),因此您需要{在您的'a'条件下,是{1}},而不是"a"

    if
  2. 字符串在Java中是不可变的,您不能替换字符串中的字符。您必须使用更改创建一个 new 字符串。

您可以使用String#substring和串联(if(t.charAt(i) == 'a') { )进行第二个操作。例如:

+

另一种方法是使用String.join

t = t.substring(0, i) + "9" + t.substring(i + 1);

甚至

t = String.join("", t.substring(0, i), "9", t.substring(i + 1));

,但最后一点可能会造成混淆。 :-)

答案 1 :(得分:1)

您无法将字符与字符串进行比较,因此请更改为:

if(t.charAt(i) == 'a')

对于第二个问题:您不能将新的char分配给字符串的位置。
您可以使用StringBuilder,这是涉及多种替换的最有效方法:

Scanner in = new Scanner(System.in);
System.out.println("Type a string");
String t = in.nextLine();
StringBuilder sb = new StringBuilder(t);

for(int i = 0; i < t.length(); i++) {
    if(t.charAt(i) == 'a') { 
        sb.setCharAt(i, '9'); 
    }
}
t = sb.toString();

在这里,您使用StringBuilder的方法setCharAt()在找到每个'a'的位置更改字符,在完成所有替换后,将其分配给字符串{{ 1}}已更改的t的字符串。