Są dwa wyjścia:

  1. Domyślam się, że stały ciąg źródłowy wpisałeś do testów, a docelowo będzie pobierać od użytkownika. Po prostu po pobraniu ciągu dopisujesz po jednym znaku | z obu stron i przetwarzasz znaki od drugiego do przedostatniego. Zanim wypiszesz ciąg docelowy, obcinasz pierwszy i ostatni znak.
  2. Fragment pobierający 3 znaki do analizy wystarczy przerobić na takie coś:
                char prev = (j > 0) ? input.charAt(j - 1) : '|';
                char act = input.charAt(j);
                char next = (j < (input.length() - 1)) ? input.charAt(j + 1) : '|';