2012-01-24 109 views
12

作爲其中一個標準Java庫的一部分,是否已有rot13()unrot13()實現?還是我必須自己寫和「重新發明輪子」?java中的ROT-13函數?

它可能是這個樣子:

int rot13 (int c) { 
    if ((c >= 'A') && (c <= 'Z')) 
    c=(((c-'A')+13)%26)+'A'; 

    if ((c >= 'a') && (c <= 'z')) 
    c=(((c-'a')+13)%26)+'a'; 

    return c; 
} 
+0

@BNL我個人比較喜歡rot104。需要專用協處理器 –

+0

@BNL LOL誰說這是出於安全目的?請參閱[這](http://stackoverflow.com/questions/3928903/what-are-some-practical-applications-of-the-rot13-algorithm) –

+8

順便說一句,rot13是它自己的逆,所以你不'實際上需要一個「unrot13」方法。 –

回答

16

我不認爲這是默認的Java的一部分,但這裏的你如何能實現它的例子。

public class Rot13 { 

    public static void main(String[] args) { 
     String s = args[0]; 
     for (int i = 0; i < s.length(); i++) { 
      char c = s.charAt(i); 
      if  (c >= 'a' && c <= 'm') c += 13; 
      else if (c >= 'A' && c <= 'M') c += 13; 
      else if (c >= 'n' && c <= 'z') c -= 13; 
      else if (c >= 'N' && c <= 'Z') c -= 13; 
      System.out.print(c); 
     } 
     System.out.println(); 
    } 

} 

來源:http://introcs.cs.princeton.edu/java/31datatype/Rot13.java.html

+0

什麼,沒有mod op? – yshavit

19

不妨貢獻我的功能,節省其他開發人員的寶貴秒

public static String rot13(String input) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < input.length(); i++) { 
     char c = input.charAt(i); 
     if  (c >= 'a' && c <= 'm') c += 13; 
     else if (c >= 'A' && c <= 'M') c += 13; 
     else if (c >= 'n' && c <= 'z') c -= 13; 
     else if (c >= 'N' && c <= 'Z') c -= 13; 
     sb.append(c); 
    } 
    return sb.toString(); 
} 
+0

感謝您抽出時間將這些內容加入到方法中。 –

+0

您是否還複製了http://introcs.cs.princeton.edu/java/31datatype/Rot13.java.html? –