簡體   English   中英

charAt() 給出值 -1

[英]charAt() gives value -1

public class Main {
    public static void main(String[] args) {
        System.out.println(tr("November 2016","abcdefghijklmnopqrstuvwyz","ABCDEFGHIJKLMNOPQRSTUVWYZ"));
    }

    public static String tr(String s, String from, String to){
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < s.length(); i++){
            if (from.contains(s.substring(i, i + 1)) || to.contains(s.substring(i, i + 1))){
                sb.append(to.charAt(to.indexOf(s.charAt(i))));
            }else {
                sb.append(s.charAt(i));
            }
        }
        return sb.toString();
    }
}

在這一行:

sb.append(to.charAt(to.indexOf(s.charAt(i))));

我得到的錯誤索引超出界限 -1,共 25 個。為什么s.charAt(i)在應該為 1 時返回 -1?

如評論中所述,代碼在嘗試在大寫字母表to查找小寫字母時失敗:

// i = 1, s.charAt(1) is 'o', to.indexOf('o') == -1 -- upper-case ONLY,
// to.charAt(-1) - StringIndexOutOfBoundsException
sb.append(to.charAt(to.indexOf(s.charAt(i))));

這段代碼的目的似乎是重新映射兩個字母的字符,即轉換除'X'之外的英文字母的大小寫。

public static String tr(String s, String from, String to){
    StringBuilder sb = new StringBuilder();
    for (char c : s.toCharArray()) {
        int ixFrom = from.indexOf(c);
        int ixTo = to.indexOf(c);
        if (ixFrom > -1) {
            sb.append(to.charAt(ixFrom)); // provide upper-case instead of lower-case
        } else if (ixTo > -1) {
            sb.append(from.charAt(ixTo)); // provide lower-case instead of upper-case
        } else {
            sb.append(c);  // keep as is
        }
    }
    return sb.toString();
}
System.out.println(tr(
    "November 2016",
    "abcdefghijklmnopqrstuvwyz",
    "ABCDEFGHIJKLMNOPQRSTUVWYZ"
));
// -> nOVEMBER 2016

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM