想要将-z更改为b-z

时间:2016-08-19 17:55:48

标签: java

  1. 问题

    我的输入为aaasssuuu,但我的输出为aaasssvvv; 我想要的是bbbtttvvv。那我的代码有什么问题?

  2. 代码

    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;
        }
    
    }
    

4 个答案:

答案 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;
}

HT @Jean-FrançoisFabre

答案 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);
            }
            }