我想从用户那里得到一个字符串。遍历所有字符,并检查是否包含任何“ 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?
};
}
}
答案 0 :(得分:3)
两件事:
char
文字是用'
而不是"
编写的("
是 string 文字),因此您需要{在您的'a'
条件下,是{1}},而不是"a"
:
if
字符串在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
的字符串。