2014-01-27 32 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的),並且是比較簡單。