问题
我的输入为aaasssuuu
,但我的输出为aaasssvvv
;
我想要的是bbbtttvvv
。那我的代码有什么问题?
代码
class Solution{
public static void main(String[] args) {
String str = "aaasssuuu";
System.out.println(functionalShiftLetters(str));
}
public static String functionalShiftLetters(String str){
String ss = new String();
for(int i =0; i<=str.length()-1 ;i++)
sb = str.replace((char)str.charAt(i), (char) (str.charAt(i)+1));
return ss;
}
}
答案 0 :(得分:2)
您可以遍历字符串,而不是使用.replace()
,而是可以在ASCII值中添加一个。这是改变方法:
public static String functionalShiftLetters(String str){
String ss = new String();
for(int x = 0; x < str.length(); x++){
ss += (char)((str.charAt(x) + 1)) + "";
}
return ss;
}
您可以使用StringBuilder
和.append()
进行O(1)插播,从而加快速度。
答案 1 :(得分:1)
使用 Java 8 :
public static void main(String[] args) {
String str = "aaasssuuu";
str.chars()
.mapToObj(x -> (char) (x + 1))
.forEach(System.out::println);
}
java 6 :
char[] w = str.toCharArray();
for (char c : w) {
System.out.println((char) (c + 1));
}
答案 2 :(得分:0)
由于没有人回答这个问题,您的错误在于您使用str
替换,但从不更新str
,因此只有最后一次替换才会生效。更新您的代码以替换您正在更新的相同变量:
public static String functionalShiftLetters(String str){
for(int i =0; i<=str.length()-1 ;i++)
str = str.replace((char)str.charAt(i), (char) (str.charAt(i)+1));
return str;
}
答案 3 :(得分:0)
class Solution{
public static void main(String[] args) {
String str = "aaassszzz";
str.chars()
.mapToObj(c -> (char)(c + 1) > 'z' ? 'a' :(char)(c+1) )
.forEach(System.out::print);
}
}