There are 26 letters in the alphabet. With ROT13, a cipher, we rotate the first 13 with the last 13. This obscures, but does not encrypt, text data.
A String
is immutable: it cannot be changed. To modify a String
with the ROT13 algorithm in Java we must first convert it to a character array. Then we convert it back to a String
.
We introduce an example method. In rot13()
we see the character-testing logic. Characters before the middle letter M are rotated backwards, and other are rotated forwards.
String
constructor to convert it back into a String
.String
, and then rotate the rotated string
to see if it correctly round-trips (it does).public class Program { public static String rot13(String value) { char[] values = value.toCharArray(); for (int i = 0; i < values.length; i++) { char letter = values[i]; if (letter >= 'a' && letter <= 'z') { // Rotate lowercase letters. if (letter > 'm') { letter -= 13; } else { letter += 13; } } else if (letter >= 'A' && letter <= 'Z') { // Rotate uppercase letters. if (letter > 'M') { letter -= 13; } else { letter += 13; } } values[i] = letter; } // Convert array to a new String. return new String(values); } public static void main(String[] args) { // Rotate the input string. // ... Then rotate the rotated string. String input = "Do you have any cat pictures?"; String rot13 = rot13(input); String roundTrip = rot13(rot13); System.out.println(input); System.out.println(rot13); System.out.println(roundTrip); } }Do you have any cat pictures? Qb lbh unir nal png cvpgherf? Do you have any cat pictures?
For punctuation and spaces, no changes are made. Most text remains in a recognizable form, so it is easy to detect ROT13. The algorithm is usually just a learning exercise.
Occasionally, if you want to make text not easily read, using ROT13 is helpful. A sophisticated computer user can decode ROT13, but many users are not sophisticated or don't care.