Результаты проверки строки, которые оба содержат \ n

Так что я быстро схожу с ума, пытаясь ответить на вопрос о кодовых войнах. Задача кода - разделить строку, удалив все комментарии из кода.

Итак, у меня есть этот код, который выполняет разборку и дает мне ожидаемые результаты:

   public static String stripComments(String text, String[] commentSymbols) {

        boolean ignoreNext = false;
        StringBuilder noCommentString = new StringBuilder();
        StringBuilder currentLine = new StringBuilder();
        for (int i = 0; i < text.length(); i++) {
            char c = text.charAt(i);
            if (String.valueOf(c).equals("\n")) {
                currentLine.append("\\n");
                ignoreNext = false;
                noCommentString.append(currentLine.toString().trim());
                currentLine = new StringBuilder();
                continue;
            }
            if (!ignoreNext) {

                for (int j = 0; j < commentSymbols.length; j++) {
                    if (commentSymbols[j].equals(String.valueOf(c))) {
                        ignoreNext = true;
                        noCommentString.append(currentLine.toString().trim());
                        currentLine = new StringBuilder();
                    }
                }
                if (!ignoreNext) {
                    currentLine.append(c);
                }
            }
        }
        return noCommentString.toString();
    }

Но по какой-то довольно странной причине этот тест не проходит:

   @Test
    public void stripComments() throws Exception {

        String expected = "apples, pears\ngrapes\nbananas";
        String actual =  StripComments.stripComments("apples, pears # and bananas\ngrapes\nbananas !apples", new String[]{"#", "!"});
        assertEquals(expected, actual);
    }

Если я должен оценить код, фактическая строка будет:

apples, pears\ngrapes\nbananas

и, конечно, вы можете увидеть, что ожидаемая строка:

apples, pears\ngrapes\nbananas

почему, черт возьми, это не удается, я уверен, что это как-то связано с каким-то странным \ n поведением

currentLine.append("\\n"); звучит очень сомнительно. Почему вы заменяете допустимую новую строку (чего и ожидает вывод) буквальным \n?
Mad Physicist 16.04.2018 21:58

В таком случае, почему бы просто не разделить символы новой строки и работать с полученным списком?

Mad Physicist 16.04.2018 21:58

Сахар, причина, по которой я оставил это, заключалась в том, чтобы попытаться испортить результаты

user3667111 16.04.2018 22:00

Как в списке строк @MadPhysicist

user3667111 16.04.2018 22:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
4
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, вам следует добавить «\ n», а не «\\ n». Здесь не требуется escape-символ. Также currentLine.toString (). Trim () вызывает удаление символа новой строки, поэтому избегайте этого. Скорее попробуйте использовать currentLine.toString (). В некоторых системах может потребоваться использовать "\ r \ n" вместо "\ n". Попробуйте это, если "\ n" вам не подходит.

Великолепно, я бы никогда не догадался, что грязь делает отделка (), спасибо

user3667111 16.04.2018 22:43

Другие вопросы по теме