好的,我有一个任务要完成,它通过50%的测试,但我不知道如何通过其余的。
我必须从输入中打印出最后5行,如果少于5行,则只需打印全部。如果最后一行包含换行符,我应该假设之后没有空行。
实施例 输入:
mymap[n] = temp;
输出:
bin: root
daemon: root
adm: root
lp: root
sync: root
shutdown: root
halt: root
mail: root
news: root
uucp: root
operator: root
hacker: root
到目前为止,我的代码是:
mail: root
news: root
uucp: root
operator: root
hacker: root
但它仍然不起作用,我不太明白他们希望我用它做什么。谁能告诉我我错过了什么?
String processInput(String input) {
String[] lines = input.split("\n");
int len = lines.length;
String[] results = new String[5];
if(len <= 5) {
results = Arrays.copyOf(lines, 0);
} else {
results = Arrays.copyOfRange(lines, len-5, len);
}
String c = "";
for(String s : results){
c += s + "\n";
}
return c;
}
答案 0 :(得分:1)
您在追加到c
的每一行的末尾添加换行符,这也意味着您在字符串的最后添加一个换行符,并且输入中没有一个换行符。
修复此问题的简单方法就是修剪输出:
return c.trim();
但是,它可能不适用于某些输入,例如使用以空格结尾的行。
或者,您可以只删除最后一个字符:
return c.substring(0, c.length() - 1);
但是,您不需要首先添加该新行(也不需要数组副本):
for (int i = Math.max(0, lines.length - 5); i < lines.length - 1; ++i) {
c += lines[i] + "\n";
}
c += lines[lines.length - 1];
实际上,您也不需要拆分,您可以直接在输入字符串上操作。此外,您应该使用StringBuilder
在循环中累积字符串片段。
答案 1 :(得分:0)
主要是因为我无法自助,下面是一个如何使用Java 8流实现此功能的示例:
String processInput(String input) {
String[] lines = input.split("\n");
int start = Math.max(0, lines.length - 5);
return Arrays.stream(lines, start, lines.length).collect(Collectors.joining("\n"));
}