都包含 \n 的测试字符串结果
Testing String results which both contain \n
所以我很快就失去了理智,试图回答一个关于 codewars 的问题。代码挑战的目的是剥离字符串,从代码中删除所有注释。
所以我有这段代码,它进行剥离并给出我期望的结果:
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行为有关
我认为您应该附加“\n”而不是“\\n”。这里不需要转义字符。 currentLine.toString().trim() 也会导致删除换行符,因此请避免使用它。而是尝试使用 currentLine.toString()。某些系统可能需要使用“\r\n”而不是“\n”。如果“\n”对你不起作用,试试这个。
所以我很快就失去了理智,试图回答一个关于 codewars 的问题。代码挑战的目的是剥离字符串,从代码中删除所有注释。
所以我有这段代码,它进行剥离并给出我期望的结果:
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行为有关
我认为您应该附加“\n”而不是“\\n”。这里不需要转义字符。 currentLine.toString().trim() 也会导致删除换行符,因此请避免使用它。而是尝试使用 currentLine.toString()。某些系统可能需要使用“\r\n”而不是“\n”。如果“\n”对你不起作用,试试这个。