Java - 新的线路循环

时间:2012-03-10 11:48:34

标签: java arraylist java.util.scanner

我有一个包含类型和数字的数组,打印时这是结果:

    car:1 car:2 car:3 boat:1 boat:2 boat:3 plane:1 plane:2 plane:3

我正在寻找一种方法来确定类型何时更改,然后创建一个新行。这意味着在车后打印“\ n”:3(和船:3)因此所有车辆都在自己的行上。

我正在使用这样的for循环打印所有这些项目:

 for(Types filename: TypeTable)
    {
        Scanner s;
        s = new Scanner(filename.toString());
        while (s.hasNext())
        {
            System.out.print(s.nextLine()+ " ");
        }

我猜我需要一些本地循环,并将第一种类型保存在某个临时变量中,并在循环中打印换行时的换行符,但我有点卡住了。

EDIT2:

休息一下后再回来我设法解决了问题,甚至没有开头的空白行。问题是我必须在main-class中定义oldTransport :) ofc你不可能知道我的结构是怎样的。谢谢你的鳗鱼气垫船:)

2 个答案:

答案 0 :(得分:3)

而不是通过System.out.print(...) 打印该行该行并将其放入变量中。通过String#split(...)方法拆分它,并将获得的第一部分(从拆分中获得的数组的[0]点中的字符串)与前一个字符串的第一部分(也保存到变量)进行比较。如果不同,请在打印线之前再换一行。

另外,如果要从扫描程序中提取nextLine(),检查是否有hasNextLine(),而不是hasNext()。

在伪代码中

String oldTransportation gets assigned ""
while the scanner has a next line
   String variable line gets scanner's next line
   String array called tokens gets this line split on ":"
   String newTransportation gets the [0] item in the tokens array
   Check if newTransportation equals(...) oldTransportation, 
       if different, call System.out.println().
   print the line variable String
   oldTransportation gets assigned newTransportation
end while scanner...

答案 1 :(得分:1)

让我们跟踪以前的类型。

String lastTypeName = "";
for(Types filename: TypeTable) {
     if(!lastTypeName.equals(filename.toString()) {
          lastTypeName = filename.toString();
          System.out.println();
     }
     Scanner s = new Scanner(filename.toString());
     while (s.hasNext()) {
         System.out.print(s.nextLine()+ " ");
     }
     s.close();
}

换行符将在第一行之前打印,但这可能不是问题。