2012-01-24 108 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? –