¿Función de ROT-13 en java?
rot13 (3)
¿Ya existe una rot13()
y unrot13()
como parte de una de las bibliotecas estándar de Java? ¿O tengo que escribirlo yo mismo y "reinventar la rueda"?
Podría verse algo como esto:
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;
}
Aquí está mi solución para cambiar los caracteres en una cadena.
public static void main(String[] args) {
String input = "melike";
int shiftCount = 13;
char[] encryptedChars = encryptedChars(shiftCount);
System.out.println(new String(encryptedChars));
char[] decryptedChars = decryptedChars(shiftCount);
System.out.println(new String(decryptedChars));
String encrypted = encrypt(input, shiftCount);
System.out.println(encrypted);
String decrypted = decrypt(encrypted, shiftCount);
System.out.println(decrypted);
System.out.println(input.equals(decrypted));
}
private static String decrypt(String input, int shiftCount) {
char[] decryptedChars = decryptedChars(shiftCount);
char[] chars = input.toCharArray();
char[] newChars = new char[chars.length];
for (int i = 0; i < chars.length; i++) {
int diff = chars[i] - ''a'';
newChars[i] = decryptedChars[diff];
}
return new String(newChars);
}
private static String encrypt(String input, int shiftCount) {
char[] encryptedChars = encryptedChars(shiftCount);
char[] chars = input.toCharArray();
char[] newChars = new char[chars.length];
for (int i = 0; i < chars.length; i++) {
int diff = chars[i] - ''a'';
newChars[i] = encryptedChars[diff];
}
return new String(newChars);
}
private static char[] encryptedChars(int shiftCount) {
char[] newChars = new char[26];
for (int i = 0; i < 26; i++) {
newChars[i] = (char) (''a'' + (i + shiftCount) % 26);
}
return newChars;
}
private static char[] decryptedChars(int shiftCount) {
char[] newChars = new char[26];
for (int i = 0; i < 26; i++) {
newChars[i] = (char) (''a'' + (i - shiftCount + 26) % 26);
}
return newChars;
}
No creo que sea parte de Java por defecto, pero aquí hay un ejemplo de cómo puedes implementarlo;
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();
}
}
Fuente: http://introcs.cs.princeton.edu/java/31datatype/Rot13.java.html
También podría contribuir mi función para salvar a otros desarrolladores los valiosos segundos
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();
}