Так что я быстро схожу с ума, пытаясь ответить на вопрос о кодовых войнах. Задача кода - разделить строку, удалив все комментарии из кода.
Итак, у меня есть этот код, который выполняет разборку и дает мне ожидаемые результаты:
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 поведением
В таком случае, почему бы просто не разделить символы новой строки и работать с полученным списком?
Сахар, причина, по которой я оставил это, заключалась в том, чтобы попытаться испортить результаты
Как в списке строк @MadPhysicist




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