Advertisement
Guest User

Untitled

a guest
Jul 1st, 2020
353
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.41 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.nio.charset.StandardCharsets;
  5. import java.util.regex.Pattern;
  6.  
  7. public class SecretChat {
  8.     public static void main(String[] args) throws IOException {
  9.         BufferedReader reader = new BufferedReader(
  10.                 new InputStreamReader(System.in, StandardCharsets.UTF_8));
  11.  
  12.         MessageDecrypter decrypter = new MessageDecrypter(reader.readLine());
  13.  
  14.         reader.lines()
  15.                 .takeWhile(command -> !"Reveal".equals(command))
  16.                 .map(decrypter::interpreter)
  17.                 .forEachOrdered(System.out::println);
  18.  
  19.         System.out.printf("You have a new text message: %s", decrypter.getMessage());
  20.     }
  21.  
  22.     private static class MessageDecrypter {
  23.         private static final Pattern COMMAND_PATTERN = Pattern.compile(":\\|:");
  24.  
  25.         private final StringBuilder msg;
  26.  
  27.         public MessageDecrypter(String msg) {
  28.             this.msg = new StringBuilder(msg);
  29.         }
  30.  
  31.         public String interpreter(String command) {
  32.             String[] token = COMMAND_PATTERN.split(command);
  33.  
  34.             switch (token[0]) {
  35.             case "InsertSpace":
  36.                 return insertSpace(Integer.parseInt(token[1]));
  37.             case "Reverse":
  38.                 return cutReverseAndConcat(token[1]);
  39.             case "ChangeAll":
  40.                 return replace(token[1], token[2]);
  41.             default:
  42.                 throw new IllegalArgumentException("Invalid command: " + command);
  43.             }
  44.         }
  45.  
  46.         private String insertSpace(int index) {
  47.             msg.insert(index, ' ');
  48.             return msg.toString();
  49.         }
  50.  
  51.         private String cutReverseAndConcat(String toCut) {
  52.             int index = msg.indexOf(toCut);
  53.  
  54.             if (index == -1) {
  55.                 return "error";
  56.             }
  57.  
  58.             msg.delete(index, index + toCut.length());
  59.             msg.append(new StringBuilder(toCut).reverse());
  60.  
  61.             return msg.toString();
  62.         }
  63.  
  64.         private String replace(String toReplace, String replaceWith) {
  65.             String updatedMessage = Pattern.compile(toReplace).matcher(msg).replaceAll(replaceWith);
  66.             msg.replace(0, msg.length(), updatedMessage);
  67.  
  68.             return msg.toString();
  69.         }
  70.  
  71.         public String getMessage() {
  72.             return msg.toString();
  73.         }
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement