我想定义一个输入字符串的方法然后返回一个字符串,其中的字符已被转换
public static String encode(String s){
char[] newArray = {'a','b','c','d','e','f','g','h','i','g','k','l','m'};
char[] newArray2 = {'n','o','p','q','r','s','t','u','v','w','s','y','z'};
for(int i=0; i<s.length();i++){
if(s.charAt(i) == newArray[i]){
s.replace(newArray[i], newArray2[i]);
}
}
return s;
}
public static void main(String[] args){
System.out.println(encode("firefly"));
}
但是编译器只返回firefly,我知道s.charAt(i) == newArray[i]
中存在问题,但是如何定义方法,例如&#39; f&#39;这个单一的char来搜索newArray,而不是如果f对应newArray的第一个char?当我想要大写字母开关只用大写时,如何定义它。那么如果我输入像FireFly这样的字符串,它会返回SverSyl吗?
答案 0 :(得分:2)
因为replace
没有更改原始String
。它返回一个新的String
。你需要写
s = s.replace(newArray[i], newArray2[i]);
将修改后的String
分配回变量s
。
答案 1 :(得分:1)
首先,Java中的字符串是不可变的。这意味着你无法改变它们。你能做的就是创造一个新的。其次,将字符串与转换数组进行比较,以在同一索引处查找匹配项。在同一位置找到一场比赛非常困难,而这不是你想要的。
您可以使用以下方法:
public static String encode(String s) {
StringBuffer b = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if ((c >= 'a' && c <= 'm') || (c >= 'A' && c <= 'M')) {
b.append((char) ((int) c + 13));
continue;
}
if ((c >= 'n' && c <= 'z') || (c >= 'N' && c <= 'Z')) {
b.append((char) ((int) c - 13));
continue;
}
b.append(c);
}
return b.toString();
}
这个想法是你独立翻译每个字符并将其添加到字符串缓冲区。然后返回结果字符串。要在'a'和'm'之间转换字符,只需在其整数代码中添加13即可。要在'n'和'z'之间转换字符,只需从整数代码中删除13即可。你对大写字母做同样的事情。
当我们用“ FireFly”调用此方法时,您很快就被取消了“
public static void main(String args[]) {
System.out.println(encode("FireFly you were cancelled too soon"));
}
结果是:
SverSyl lbh jrer pnapryyrq gbb fbba
答案 2 :(得分:1)
字符串是不可变的。因此,从技术上讲,您需要创建一个新对象并为其指定引用。您可以将之前的字符串本身分配给它:
s = s.replace(newArray [i],newArray2 [i]);
答案 3 :(得分:0)
在代码的最后,您将返回s
,但它的值实际上并未更改。您需要为该变量分配其他内容,否则您将获得与输出相同的值。