Guest User

Untitled

a guest
Jun 2nd, 2025
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.69 KB | None | 0 0
  1. /*
  2. Классик правильно ли скобки расставлены и все ли закрыты.
  3.  
  4. При рекурсии схлопывается из-за Optional.empty()
  5. */
  6.  
  7. static String checkBrackets(String input) {
  8.     return checkBrackets("(" + input + ")", new Val(0, (char) 0)).map(val -> val.index > input.length())
  9.             .orElse(false) ?
  10.             "Правильно" : "Неправильно";
  11. }
  12.  
  13. record Val(int index, char bracket) {
  14.  
  15. }
  16.  
  17. static Optional<Val> checkBrackets(String input, Val val) {
  18.     record Brackets(char open, char close) {
  19.         static Optional<Brackets> of(char a) {
  20.             return Optional.ofNullable(switch (a) {
  21.                 case '(', ')' -> new Brackets('(', ')');
  22.                 case '[', ']' -> new Brackets('[', ']');
  23.                 case '{', '}' -> new Brackets('{', '}');
  24.                 default -> null;
  25.             });
  26.         }
  27.     }
  28.     final var now = input.charAt(val.index);
  29.     return Brackets.of(now).flatMap(br -> switch (val) {
  30.         case Val(var i, var b) when i == 0 -> checkBrackets(input, new Val(i + 1, b));//start recursion
  31.         case Val(var i, _) when now == br.close -> Optional.of(new Val(i, now));//if found close bracket
  32.         case Val(var i, var b) -> checkBrackets(input, new Val(i + 1, b)).flatMap(v -> switch (v) {
  33.                     case Val(_, var in_b) when br.close != in_b -> Optional.empty();//bracket error
  34.                     case Val(var in_i, _) when input.length() - 1 <= in_i -> Optional.empty();//size error
  35.                     case Val(var in_i, _) -> checkBrackets(input, new Val(in_i + 1, val.bracket));//found to up
  36.                 }
  37.         );
  38.     });
  39. }
  40.  
  41.  
Advertisement
Add Comment
Please, Sign In to add comment