2014-01-27 27 views
-4

我正在编写一个android程序,用于“编码”您的字符串。如果输入“abz”,它应该输出“bca”,基本上该字符串中的每个单独字符都会更改为下一个字符。我实现了这个在JavaScript更改字符串中字符的值JAVA

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

+6

您是否尝试过在Java中使用它? – Prince

+1

我想提一下,像这样的密码对于安全编码数据来说相当糟糕。 – ArtOfWarfare

+0

对不起,这种类型的问题在StackOverflow中是不鼓励的。无可否认,你之前做过*某事*(通过在JS中实现它),但这还不够...向我们展示一些我们可以修复的Java尝试! –

回答

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不具备var关键字如JavaScript,所以你必须要明确地输入你的变量。另一个不同的是,使用string.charAt(pos)而不是string[pos]索引String

请注意,String在Java中是不可变的,所以每次你追加到String时,实际上你都会创建一个新的,这会导致相当大的性能问题。 A StringBufferStringBuilder将更适合此。

现场演示这里:http://ideone.com/ZrZL0L

2

我建议使用StringBuilder类。

StringBuilder sb = new StringBuilder(); 
sb.append(somechar); 
sb.append(somechar); 
sb.append(somechar); 

像这样。正如pcnThird指出的那样,String类是不可变的。 StringBuilder不是,所以对此很好。

完成后,通过sb.toString();获取字符串。

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的),并且是比较简单。