[英]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.