19

作为标准 Java 库之一的一部分,是否已经有一个rot13()和实现?unrot13()还是我必须自己写并“重新发明轮子”?

它可能看起来像这样:

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

4 回答 4

26

不妨贡献我的功能来为其他开发人员节省宝贵的时间

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();
}
于 2013-07-01T02:42:51.090 回答
19

我不认为默认情况下它是 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

于 2012-01-24T02:19:09.170 回答
0
private final static List<String> upperAlphabets = Arrays.asList(
        "A", "B", "C", "D", "E", "F", "G",
        "H", "I", "J", "K", "L", "M", "N",
        "O", "P", "Q", "R", "S", "T", "U",
        "V", "W", "X", "Y", "Z");
private final static List<String> lowerAlphabets = Arrays.asList(
        "a", "b", "c", "d", "e", "f", "g",
        "h", "i", "j", "k", "l", "m", "n",
        "o", "p", "q", "r", "s", "t", "u",
        "v", "w", "x", "y", "z");

 private static void rot(int toSkip, String value) {
        StringBuilder sb = new StringBuilder();
        int pos = 0, newPos = 0;
        boolean upper;
        for (char c : value.toCharArray()) {
            pos = upperAlphabets.indexOf(String.valueOf(c));
            if (pos == -1) {
                pos = lowerAlphabets.indexOf(String.valueOf(c));
                upper = false;
            } else {
                upper = true;
            }

            if (pos + toSkip > 25) {
                newPos = (pos + toSkip) % 26;
            } else {
                newPos = pos + toSkip;
            }

            if (upper) {
                sb.append(upperAlphabets.get(newPos));
            } else {
                sb.append(lowerAlphabets.get(newPos));
            }
        }
        System.out.println(sb);
    }

这不仅与 rot13 有关,还可以根据您传递的值执行 rot100 或 rot1213 任何操作,最重要的是,大写和小写字母列表都是必须的。

于 2021-09-23T09:34:39.370 回答
-1

你做的像dis:

公共类 Rot13 {

pblic static void main(Strng[] args) {
    String s = args[0];
    for (int i = 0; i < s.length(); i++) {
        char c = s.chrAt(i);
        if       (c >= 'a' & c <= 'm') c += 13;
        els if  (c >= 'A' & c <= 'M') c += 13;
        els if  (c >= 'n' & c <= 'z') c -= 13;
        els if  (c >= 'N' & c <= 'Z') c -= 13;
        System.out.print(c);
    }
    System.out.println();
}
于 2021-08-26T08:31:53.780 回答