我正在一个Java项目中,碰壁了。我正在尝试读取文件并使用该文件创建一些对象。一条线将创建一个类型为TransportLine的对象,随后n条线将创建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所没有的界限吗? (我想我可能已经在这里回答了自己的问题,尝试尝试一下,但是仍然非常感谢您的帮助……我挠头了)
最佳答案
您可以使用此正则表达式,
\w+( \w+)*;\d+
Working Demo
它将捕获除包含字符串
TransportLine
的行以外的所有行