java 将字符串的字符转换为相反的大小写

8aqjt8rx  于 2022-10-30  发布在  Java
关注(0)|答案(3)|浏览(178)

//为什么它转换为小写而不是大写

public class LowerUpperCase {

    public static void main(String[] args) {
        String s="lowerUppercase";

        for (int i = 0; i < s.length()-1; i++) {

            if(s.charAt(i) >='a' && s.charAt(i)<='z'){  //OR IF DONE THIS NOT WORKING

if((s.charAt(i) >='a' && s.charAt(i)<='z' ) || (s.charAt(i) >='A' && s.charAt(i)<='Z')){


                 s=s.toLowerCase();//here should i go for 

            }
            else if(s.charAt(i) >='A' && s.charAt(i)<='Z'){

                s=s.toUpperCase();

           }

        }
        System.out.println(s);
    }
}

//我总是得到像小写或小写这样的输出

INPUT:LowerUpperCase
OUTPUT:lOWERuPPERcASE  expected

HERE WHY IS IT CONVERTING TO LOWER CASE BUT NOT TO UPPER CASE 

I ALWAYS GET OUTPUT LIKE loweruppercase or LOWERUPPERCASE
wj8zmpe1

wj8zmpe11#

你的代码看起来是正确的,但是你需要在小写和大写之间切换。试试这个版本:

String s = "lowerUppercase";
StringBuilder output = new StringBuilder();

for (int i=0; i < s.length(); i++) {
    if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') {
        output.append(Character.toUpperCase(s.charAt(i)));
    }
    else {
        output.append(Character.toLowerCase(s.charAt(i)));
    }
}

System.out.println(output.toString());
// LOWERuPPERCASE

注意,上面的例子假设输入字符串中只有小写和大写的英语字母,如果不是这样,那么答案可能要改变。

vhmi4jdf

vhmi4jdf2#

现在你知道为什么了。下面是另一种方法:

String s = "Lower to UpperCase";

StringBuilder sb = new StringBuilder("");
for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    if (Character.isLowerCase(c)) {
         sb.append(Character.toUpperCase(c));
    }
    else {
        sb.append(Character.toLowerCase(c));
    }
}
s = sb.toString();
System.out.println(s);

这将输出到控制台窗口:

lOWER TO uPPERcASE
xpszyzbs

xpszyzbs3#

因为您是在整个字串上呼叫方法,而您只想切换位置i之字符的大小写。如果最后一个字母是小写,则程式码范例会将整个字串设定为小写,而在其他情况下则设定为大写。
另外,Java中的String是一个不可变的对象,这意味着一旦创建了它,就不能更改它的值,因此需要一个stringBuilder。

public static void main(String[] args) {
        String s = "lowerUppercase";
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < s.length() - 1; i++) {
            if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z') {
                sb.append(Character.toUpperCase(s.charAt(i)));
            } else {
                sb.append(Character.toLowerCase(s.charAt(i)));
            }
        }
        System.out.println(sb);
    }

如果你想玩函数式编程,这里有一个函数式版本(它不实用,纯粹是教育性的):

public static void main(String[] args) {
        String s = "lowerUppercase";

        StringBuilder out = s.chars()
                .map(i -> {
                    if (Character.isLowerCase(i)) {
                        return Character.toUpperCase(i);
                    } else if (Character.isUpperCase(i)) {
                        return Character.toLowerCase(i);
                    }
                    return i;
                }).collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append);

        System.out.println(out);
    }

相关问题