我有一个包含类型和数字的数组,打印时这是结果:
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你不可能知道我的结构是怎样的。谢谢你的鳗鱼气垫船:)
答案 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();
}
换行符将在第一行之前打印,但这可能不是问题。