2016-08-19 66 views
0
  1. 问题想要一个-z改变到B-Z

    我的输入为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; 
        } 
    
    } 
    
+2

粘贴代码,代码和修复缩进,这会让人们更容易查看您的问题。 – MathBunny

+1

你的代码不能编译。 'sb'定义在哪里? –

+0

所以你想要一个“ROT(1)”? – ppeterka

回答

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并给出了O(1)插入.append()

+0

呐喊,错字,修正。 – MathBunny

+0

没问题,一旦您找到帮助您的答案,请务必将其标记为已回答。 – MathBunny

+0

如果我想z是一个?? – MikeLI

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)); 
    } 
+0

非常感谢你,我正在学习Java 8。 – MikeLI

+0

如果我想z是一个?? – MikeLI

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

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