java rot13

¿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(); }