我想知道以下代码到底有什么问题。在if语句之后,我在行上遇到错误。该代码接受一个包含大写和小写字母的字符串,但在将大写字母转换为小写字母之后返回该字符串。
public class Main {
public static void main(String[] args) {
toLowerCase("HeLloWoRlD!");
}
private static String toLowerCase(String str) {
for (int i = 0; i < str.length(); i++) {
if (Character.isUpperCase(str.charAt(i))) {
str.charAt(i) = Character.toLowerCase(str.charAt(i));
}
}
return str;
}
}
答案 0 :(得分:6)
str.charAt(i)
不能是赋值运算符的左侧。这是方法调用返回的值,您无法分配给它。
此外,String
是不可变的。您无法修改str
的字符。
您必须为返回的方法创建一个新的String
。
例如:
private static String toLowerCase(String str) {
StringBuilder sb = new StringBuilder(str.length());
for (int i = 0; i < str.length(); i++) {
if (Character.isUpperCase(str.charAt(i))) {
sb.append (Character.toLowerCase(str.charAt(i)));
} else {
sb.append (str.charAt(i));
}
}
return sb.toString();
}
答案 1 :(得分:1)
将您的代码更改为以下内容:
ressource_owners
字符串是不可变的,因此您不能即时更改现有的字符串。相反,您可以创建一个StringBuffer并在迭代原始options:
access_type: offline
prompt: consent
时相应地附加值。
答案 2 :(得分:1)
字符串是不可变的,因此您不能更改(重新分配)字符串内的字符。 这是最简单的解决方案,只需使用String类中的内置方法即可。
private static String toLowerCase(String str) {
return str == null ? null : str.toLowerCase(); //consider str.toLowerCase(Locale.ROOT) if you are using non english language with special characters
}
答案 3 :(得分:0)
您正在使用String.charAt(i),该字符串在该位置返回字符Value。您不能为其分配值的参考位置。
请检查以下文档。 https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#charAt-int-
如果要使用charAt功能对其进行修改,则需要将字符串转换为字符数组
private static String toLowerCase(String str) {
char[] newStr = str.toCharArray();
for (int i = 0; i < str.length(); i++) {
if (Character.isUpperCase(str.charAt(i))) {
newStr[i] = Character.toLowerCase(str.charAt(i));
}
}
return new String(newStr);
}
答案 4 :(得分:0)
方法charAt(i)
用于按字符串中的索引(位置)获取字符。但是,您将其用于设置,这是不对的。
例如,在您的情况下,方法toLowerCase()
应该返回新的String对象。
private static String toLowerCase(String str) {
String returning_Str = "";
for (int i = 0; i < str.length(); i++) {
char test_char = str.charAt(i);
if (Character.isUpperCase(test_char)) {
test_char = Character.toLowerCase(test_char);
}
returning_Str += test_char;
}
return returning_Str;
}
答案 5 :(得分:0)
您不能更改字符串的内容。您必须创建一个新对象:
public class Main {
public static void main(String[] args) {
toLowerCase("HeLloWoRlD!");
}
private static String toLowerCase(String str) {
for (int i = 0; i < str.length(); i++) {
if (Character.isUpperCase(str.charAt(i))) {
str = new String(str.replace(str.charAt(i),Character.toLowerCase(str.charAt(i))));
}
}
return str;
}
}
答案 6 :(得分:0)
首先将一个变量赋值给它。 该代码将按预期工作
public class Main {
public static void main(String[] args) {
System.out.println(toLowerCase("HeLloWoRlD!"));
}
private static StringBuffer toLowerCase(String str) {
StringBuffer buf=new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char c=str.charAt(i);
if (Character.isUpperCase(str.charAt(i))) {
c = Character.toLowerCase(str.charAt(i));
buf.append(c);
}else{
buf.append(c);
}
}
return buf;
}
}
答案 7 :(得分:0)
private static String toLowerCase(String str){
return str.chars().map(Character::toLowerCase).collect(StringBuilder::new,
StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
}
or
private static String toLowerCase(String str){
return str.toLowerCase();
}