Java 没有编译器错误,但它没有';不要改变字符串

Java 没有编译器错误,但它没有';不要改变字符串,java,Java,我正试图编写一个程序,改变字符串中两个字符的大小写(将大写改为小写,反之亦然)。它已编译,但字符串是相同的 String newChar1 = caseChanger("DcoderIsCool", 3); String newChar2 = caseChanger("DcoderIsCool", 8); 我认为问题在于我使用的方法: public static String caseChanger (String s, int ind) { if(!(Character.isU

我正试图编写一个程序,改变字符串中两个字符的大小写(将大写改为小写,反之亦然)。它已编译,但字符串是相同的

String newChar1 = caseChanger("DcoderIsCool", 3); 
String newChar2 = caseChanger("DcoderIsCool", 8);  
我认为问题在于我使用的方法:

public static String caseChanger (String s, int ind) {
    if(!(Character.isUpperCase(s.charAt(ind)))) { 
        //checking if the character is uppercase or lowercase
        return s.substring(ind, ind + 1).toLowerCase();
    } else {
        return s.substring(ind, ind + 1).toUpperCase();        
    }
}

输出应该是“dcodericool”,但它是“dcodericool”(原始字符串)。

我想这就是您要查找的内容

public static String caseChanger (String s, int ind) {
    if((Character.isUpperCase(s.charAt(ind)))) { //checking if the character is uppercase or lowercase

        return new StringBuilder(s).replace(ind,ind+1,s.substring(ind, ind + 1).toLowerCase()).toString();
    }
    else {
        return new StringBuilder(s).replace(ind,ind+1,s.substring(ind, ind + 1).toUpperCase()).toString();        }
}
因此,您只更改了n个字符,并将更改后的字符返回到额外的not旁边!你正在添加的意思是如果你的条件是相反的。但您要寻找的是在原始字符串中所需的位置替换字符。如果我没弄错的话。
希望对你有所帮助

希望我正确理解了你的问题

下面的代码将为您提供输出
dcodericool
dcodericool

public static String caseChanger(String s, int ind) {

    char[] charArr = s.toCharArray();

    if (!(Character.isUpperCase(s.charAt(ind)))) {
        charArr[ind] = Character.toUpperCase(s.charAt(ind));
    } else {
        charArr[ind] = Character.toLowerCase(s.charAt(ind));
    }
    return String.valueOf(charArr);
}

您从字符串中提取了字符,但未将其放回字符串中 s、 子字符串(ind,ind+1).toLowerCase()应用于单个字符

而是返回s.substring(ind,ind+1).toLowerCase()


将CaseChanged字符替换回原始字符串。

调用函数的代码部分在哪里?另外,假设“errors”是指“compiler errors”,则“There no errors”是一个较低的清除条。您还需要检查编译器不知道的逻辑错误。检查您的条件:如果字符不是大写,则将其转换为小写。这似乎不对…如果(!大写)返回小写?谢谢!正如建议的那样,我删除了“!”并且它现在可以工作了,但是您的代码更直接,因此我还将更改返回语句:)使用StringBuilder,而不是StringBuffer。StringBuffer强制每个方法都有同步开销,这在单线程逻辑中没有好处,即使在多线程逻辑中也很少有好处。