使用charAt将大写字符串转换为小写

时间:2018-11-19 11:58:13

标签: java string

我想知道以下代码到底有什么问题。在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;
    }

}

8 个答案:

答案 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();

}