我正在写一个“编码”你的字符串的android程序。如果输入“abz”,它应输出“bca”,基本上该字符串中的每个字符都将更改为下一个字符。我在JavaScript中实现了这个
var alphabet = "abcdefghijklmnopqrstuvwxyza",
var newstr = '';
for (var i = 0; i < str.length; i++) {
if (alphabet.indexOf(str[i]) != -1) {
newstr += alphabet[alphabet.indexOf(str[i]) + 1];
} else {
newstr += str[i];
}
}
我将如何在JAVA中执行此操作
答案 0 :(得分:2)
一些小修改:
String alphabet = "abcdefghijklmnopqrstuvwxyza";
String newstr = "";
for (int i = 0; i < str.length(); i++) {
if (alphabet.indexOf(str.charAt(i)) != -1) {
newstr += alphabet.charAt(alphabet.indexOf(str.charAt(i)) + 1);
} else {
newstr += str.charAt(i);
}
}
Java没有像JavaScript这样的var
关键字,因此您必须明确键入变量。另一个不同的是String
使用string.charAt(pos)
而不是string[pos]
编制索引。
请注意,String
在Java中是不可变的,因此每次附加到String
时,实际上都会创建一个新的,这会导致相当大的性能问题。 StringBuffer
或StringBuilder
更适合此。
答案 1 :(得分:2)
我建议使用StringBuilder类。
StringBuilder sb = new StringBuilder();
sb.append(somechar);
sb.append(somechar);
sb.append(somechar);
像这样。正如pcnThird所指出的,String类是不可变的。 StringBuilder不是,所以它很适合。
完成后,请按sb.toString();
获取字符串。
答案 2 :(得分:0)
我不确定为什么人们建议使用charAt
,但我认为你应该自己迭代这些角色
String s = /* words */;
char[] sentence = s.toCharArray();
for (int i = 0; i < sentence.length; i++) {
if (Character.toLowerCase(char[i]) == 'z') {
if (Character.isUpperCase(char[i])) {
char[i] = 'A';
} else {
char[i] = 'a';
}
} else {
char[i]++;
}
}
String encoded = new String(sentence);
这只会创建一个额外的字符串实例(不需要stringbuilder),并且相对简单。