从输入Java中打印出最后一行

时间:2015-09-22 22:55:47

标签: java arrays string

好的,我有一个任务要完成,它通过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;
    }

2 个答案:

答案 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"));
}