【问题标题】:Why am I getting an empty element in my array when using useDelimiter为什么在使用 useDelimiter 时我的数组中有一个空元素
【发布时间】:2013-12-30 05:29:47
【问题描述】:

我有一个如下所示的文本文件:

Event=ThermostatNight,time=0
Event=LightOn,time=2000
Event=WaterOff,time=10000
Event=ThermostatDay,time=12000
Event=Bell,time=9000,rings=5
Event=WaterOn,time=6000
Event=LightOff,time=4000
Event=Terminate,time=20000
Event=FansOn,time=7000
Event=FansOff,time=8000

我有这样的方法:

public void extractDataIntoArray() {
    array = new ArrayList<String>();    
    while (s.hasNext()) {
        s.useDelimiter("(,.*)|[^0-9]+");
        array.add(s.next());
        System.out.println(array);
    }
}

我只想返回“0”、“2000”等时间值。在文本文件的第五行,我想完全忽略“rings=5”。此外,“rings=”的值并不总是 5,它会发生变化,但我仍然想忽略它。使用上面的正则表达式,我能够得到这个输出:

[0, 2000, 10000, 12000, 9000, , 6000, 4000, 20000, 7000, 8000]

请注意,在数组的第 6 个位置有一个空值。我可以在分隔符中添加什么来删除这个空值?

【问题讨论】:

  • 您的分隔符与环匹配。也许应该是time=...
  • 我不希望分隔符与环相匹配以便将其删除吗?
  • 我想忽略“rings=5”或任何其他数字,例如“rings=23”
  • 你想忽略的总是“环”吗?
  • 是的,对于我扫描的任何文本文件,我都想忽略“rings=(无论它是什么数字)”

标签: java


【解决方案1】:

在这种情况下,只需不向数组中添加空字符串就足够了,因为您已经忽略了“ring=X”部分

while (s.hasNext()) {
    s.useDelimiter("(,.*)|[^0-9]+");
    String next = s.next();
    if (next.length() > 0)
        array.add(next);
    System.out.println(array);
}

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多