我正在一个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的行以外的所有行

10-05 18:22