Guest User

Untitled

a guest
Feb 17th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.17 KB | None | 0 0
  1. public final class Caesar {
  2. private static final int NUM_LETTERS = 26;
  3.  
  4. public static String caesar(final String s, final int shift) {
  5. return s.chars()
  6. .filter(Caesar::isEnglishLetter)
  7. .map(character -> getIntUnaryOperator((char) character, shift))
  8. .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
  9. .toString();
  10. }
  11.  
  12. private static boolean isEnglishLetter(final int i) {
  13. return (i >= 'A' && i <= 'Z') || (i >= 'a' && i <= 'z');
  14. }
  15.  
  16. private static int getIntUnaryOperator(final char character, final int shift) {
  17. if (Character.isUpperCase(character)) {
  18. return safeShift(character, shift, 'A');
  19. }
  20.  
  21. if (Character.isLowerCase(character)) {
  22. return safeShift(character, shift, 'a');
  23. }
  24.  
  25. throw new IllegalArgumentException("Character has to be an english letter, was " + character);
  26. }
  27.  
  28. private static int safeShift(final char character, final int shift, final char startOffset) {
  29. return (character - startOffset + NUM_LETTERS + (shift % NUM_LETTERS)) % NUM_LETTERS + startOffset;
  30. }
  31. }
Add Comment
Please, Sign In to add comment