【发布时间】:2015-03-29 23:10:48
【问题描述】:
我正在做一个 java 项目,但遇到了困难。我正在尝试读取文件并使用该文件创建一些对象。一条线路将创建一个 TransportLine 类型的对象,然后是 n 条线路,这些线路将创建站点以填充 TransportLine 数据结构,然后将 TransportLine 添加到 TransportSystem,n 次。这是一个示例输入:
TransportLine RD
Shady Grove;2100
Rockville;7800
Farragut North;1600
Metro Center;1200
Gallery Place;2400
Union Station;5300
Fort Totten;2050
Takoma;4800
Glenmont;0
TransportLine OR
Vienna;1100
East Falls Church;3100
Rosslyn;2730
Foggy Bottom;1600
Metro Center;3300
Smithsonian;2400
LEnfant Plaza;2000
Potomac Ave;5200
Stadium Armony;7200
New Carlton;0
TransportLine GR
GreenBelt;1100;
College Park;4100
Fort Tottem;3400
Columbia Heights;6200
Gallery Place;2700
LEnfant Plaza;5500
Anacostia;6240
Branch Ave;0
这是我的代码:
public static void main(String[] args) throws FileNotFoundException{
TransportSystem ts = new TransportSystem();
String LINE = "TransportLine";
Scanner read = new Scanner(new File("WashingtonDCMetro.txt"));
String str;
String lineID, name;
int distance;
while(read.hasNext()){
str = read.nextLine();
List<String> items = Arrays.asList(str.split("\\s"));
TransportLine temp = new TransportLine(items.get(1));
System.out.println(items.toString());
while(read.hasNext("\\p{ASCII}*;\\p{ASCII}*")){
str = read.nextLine();
items = Arrays.asList(str.split(";"));
System.out.println(items.toString());
temp.addStation(new Station(items.get(0), temp.getLineID(), Integer.parseInt(items.get(1))));
}
ts.addLine(temp);
}
System.out.println(ts.toString());
}
问题似乎在于嵌套的while循环:
while(read.hasNext("\\p{ASCII}*;\\p{ASCII}*")){
我想检查下一行是否有任意数量的字符或空格,后跟“;”后跟任意数量的数字,除了由于空格而没有在输入的第二行拾取:
Shady Grove;2100
第一次进入这个循环是输入的第三行。任何想法如何修改正则表达式以捕获 TransportLine 之前没有的行? (我想我可能已经在这里回答了我自己的问题,开始尝试一些东西,但仍然非常感谢您的帮助......我正在摸不着头脑)
【问题讨论】:
标签: java regex loops while-loop java.util.scanner