【问题标题】:Problems with regex java正则表达式 java 的问题
【发布时间】: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


    【解决方案1】:

    你可以使用这个正则表达式,

    \w+( \w+)*;\d+
    

    Working Demo

    它将捕获除包含字符串TransportLine 的行之外的所有行

    【讨论】:

      猜你喜欢
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 2011-04-25
      相关资源
      最近更新 更多