public static String formatBrainFuck(String input) { input = input.replaceAll("[\r\n\t ]+", ""); StringBuilder builder = new StringBuilder(input); int layer = 0; int[] layers = new int[input.length()]; for (int index = 0; index < builder.length(); index++) { char c = builder.charAt(index); if (c == '[') layers[index] = ++layer; else if (c == ']') layers[index] = --layer; else layers[index] = layer; } for (layer = 0; layer < Arrays.stream(layers).max().orElse(0); layer++) { builder.append('\n'); boolean open = false; for (int index = 0; index < layers.length; index++) { if (layer < layers[index]) if (!open) { builder.append('['); open = true; } else builder.append('_'); else { if (open) { builder.append(']'); open = false; } else builder.append(' '); } } } return builder.toString(); }