扫描较大的文本,行之间有空格

时间:2015-04-04 15:08:35

标签: java java.util.scanner

我完全被困了几个小时。

说我想要扫描一个程序,例如

 // my  program in C++

#include <iostream>
/** playing around in
a new programming language **/
using namespace std;

int main ()
{
  cout << "Hello World";
  cout << "I'm a C++ program"; //use cout
  return 0;
}

我想通过此输入并将其保存在ArrayList<String>

这是我的代码:

public static void main(String[] args) {
        ArrayList<String> testCase = new ArrayList<String>();
        int count = 0;
        Scanner s = new Scanner(System.in); 
        testCase.add(s.nextLine());
        while (s.hasNext() && s.next().length() > 1) {
            testCase.add(s.nextLine());
        }

        System.out.println("\n\n\n\n----------------Output from loop------------------");
        for (String tc : testCase) {
            System.out.println(tc);
        }       
    }

输出:

----------------Output from loop------------------
 // my  program in C++
 <iostream>
 playing around in

如果连续出现2个空行,则扫描应该停止。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您的代码中的问题是您在条件中使用s.next()。此方法使用下一个令牌,该令牌不能再被使用。

我不知道s.next().length() > 1要检查的是什么,但是如果你删除那部分条件,你将消费每一行而没有任何问题。

以下代码将扫描每一行,并在满足两个连续的空行时停止:

public static void main(String[] args) throws Exception {
    System.setIn(new FileInputStream("C:\\Users\\Simon\\Desktop\\a.txt"));
    ArrayList<String> testCase = new ArrayList<String>();
    int emptyLines = 0;
    String line;
    Scanner s = new Scanner(System.in);
    testCase.add(s.nextLine());
    while (s.hasNext() && emptyLines < 2) {
        line = s.nextLine();
        if (line.isEmpty()) {
            emptyLines++;
        } else {
            emptyLines = 0;
        }
        testCase.add(line);
    }

    System.out.println("\n\n\n\n----------------Output from loop------------------");
    for (String tc : testCase) {
        System.out.println(tc);
    }
}