以下是使用下划线替换单词元音的代码:
String[] vowelArray = arrayInput;
for (int x = 0; x < vowelArray.length; x++){
for (int a = 0; a < vowelArray[x].length(); a++){
switch (vowelArray[x].charAt(x)){
case 'A': vowelArray[x].charAt(x) = "_";
case 'a': vowelArray[x].charAt(x) = "_";
case 'E': vowelArray[x].charAt(x) = "_";
case 'e': vowelArray[x].charAt(x) = "_";
case 'I': vowelArray[x].charAt(x) = "_";
case 'i': vowelArray[x].charAt(x) = "_";
case 'O': vowelArray[x].charAt(x) = "_";
case 'o': vowelArray[x].charAt(x) = "_";
case 'U': vowelArray[x].charAt(x) = "_";
case 'u': vowelArray[x].charAt(x) = "_";
case 'Y': vowelArray[x].charAt(x) = "_";
case 'y': vowelArray[x].charAt(x) = "_";
}
}
}
但是在编译时,我收到此错误:
线程“main”中的异常java.lang.Error:未解析的编译 问题:作业的左侧必须是变量
它出现在每个案例的switch语句中。 我做错了什么?
答案 0 :(得分:6)
你无法在Java中更改String
,它是一个不可变对象。您可以做的是从char[]
获取基础String
,修改数组,并使用它创建新的String
(并且不要忘记使用case
)结束每个break
语句:
String[] vowelArray = arrayInput;
for (int x = 0; x < vowelArray.length; x++) {
char[] chars = vowelArray[x].toCharArray();
for (int a = 0; a < chars.length; a++) {
switch (chars[a]) {
case 'A': chars[a] = "_"; break;
case 'a': chars[a] = "_"; break;
case 'E': chars[a] = "_"; break;
case 'e': chars[a] = "_"; break;
case 'I': chars[a] = "_"; break;
case 'i': chars[a] = "_"; break;
case 'O': chars[a] = "_"; break;
case 'o': chars[a] = "_"; break;
case 'U': chars[a] = "_"; break;
case 'u': chars[a] = "_"; break;
case 'Y': chars[a] = "_"; break;
case 'y': chars[a] = "_"; break;
}
}
vowelArray[x] = new String(chars);
}
甚至更简单,您可以使用replaceAll()
方法执行替换:
String[] vowelArray = arrayInput;
for (int x = 0; x < vowelArray.length; x++) {
vowelArray[x] = vowelArray[x].replaceAll("[AaEeIiOoUuYy]", "_");
}
答案 1 :(得分:3)
字符串是不可变的,你正在做的事情(string.charAt(x) = "_";
)并没有多大意义。您正在尝试为方法调用的结果分配值。错误消息还描述了语句的问题;编译器期望左侧有一个变量。
要执行您想要的操作,您可以使用带有String#replaceAll
的正则表达式。
String newString = string.replaceAll("[AEIOUYaeiouy]", "_");
您甚至可以将其分配回旧字符串本身:
string = string.replaceAll("[AEIOUYaeiouy]", "_");
答案 2 :(得分:0)
由于您无法在Java中更改String,因此可以构建新字符串
for (int x = 0; x < vowelArray.length; x++){
StrinbBuilder b = new StringBuilder();
for (int a = 0; a < vowelArray[x].length(); a++){
switch (vowelArray[x].charAt(a)){
case 'A'://fall thru
case 'a'://fall thru
//and all the other case's
b.append("_");
break;
default:
b.append(vowelArray[x].charAt(a));
break;
}
}
vowelArray[x] = b.toString(); //replace the new string
}
请注意,您的vowelArray[x].charAt(x)
应为vowelArray[x].charAt(a)
您也可以使用其他方法代替大开关:
String vowels = "AaEeIiOoUuYy";
if (vowels.indexOf(vowelArray[x].charAt(x)) != -1) {
//it's a vowel
b.append("_");
} else {
b.append(vowelArray[x].charAt(x));
}
答案 3 :(得分:0)
您无法通过更改一个字符来更改String
。没有一种方法可以将带有字符String
的新x
(即s.charAt(x)
)更改为c
,但您可以这样做:
String newString = s.substring(0,x) + c + s.substring(x+1);
即s
从0到x-1
的字符(含);然后是角色c
;然后是从s
到结尾的x+1
字符。这将适用于边界情况(x==0
或x==s.length()-1
)。我发布这个作为“你会做什么而不是将charAt(x)
放在作业左侧”的一般解决方案,但其他答案对于这个特定问题更好。