没有编译器错误,但没有更改字符串

时间:2019-07-15 10:39:54

标签: java

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

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();        
    }
}

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

4 个答案:

答案 0 :(得分:1)

希望我的理解正确。

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

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);
}

答案 1 :(得分:0)

我认为这就是您要寻找的

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旁边的那些已更改的字符!您添加的意思是您的条件是否相反。但是,您要寻找的是在原始String中所需的位置替换字符。如果我没错的话。 希望对您有帮助

答案 2 :(得分:0)

首先将您的字符串转换为char数组,然后在特定索引处找到该字符,并检查其是否为小写,然后将其转换为大写,如果是大写,则将其转换为小写并采用字符串生成器对象,将转换后的字符添加到其中。

import android.arch.persistence.room.TypeConverter;

import org.joda.time.DateTime;

public class DateTimeConverter {
    @TypeConverter
    public static DateTime toDateTime(Long millis) {
        return millis == null ? null : new DateTime(millis);
    }

    @TypeConverter
    public static Long toMillis(DateTime dateTime) {
        return dateTime == null ? null : dateTime.getMillis();
    }
}

答案 3 :(得分:0)

您从字符串中提取了字符,但没有放回字符串中 s.substring(ind,ind + 1).toLowerCase()应用于单个字符

代替返回s.substring(ind,ind +1).toLowerCase();

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