Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public final class Caesar {
- private static final int NUM_LETTERS = 26;
- public static String caesar(final String s, final int shift) {
- return s.chars()
- .filter(Caesar::isEnglishLetter)
- .map(character -> getIntUnaryOperator((char) character, shift))
- .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
- .toString();
- }
- private static boolean isEnglishLetter(final int i) {
- return (i >= 'A' && i <= 'Z') || (i >= 'a' && i <= 'z');
- }
- private static int getIntUnaryOperator(final char character, final int shift) {
- if (Character.isUpperCase(character)) {
- return safeShift(character, shift, 'A');
- }
- if (Character.isLowerCase(character)) {
- return safeShift(character, shift, 'a');
- }
- throw new IllegalArgumentException("Character has to be an english letter, was " + character);
- }
- private static int safeShift(final char character, final int shift, final char startOffset) {
- return (character - startOffset + NUM_LETTERS + (shift % NUM_LETTERS)) % NUM_LETTERS + startOffset;
- }
- }
Add Comment
Please, Sign In to add comment