从文件中每行的开头创建字符串列表

时间:2015-06-10 20:25:35

标签: java regex

如果我有一个类似下面的属性文件,那么制作“环境”字符串列表的最简单方法是什么?

假设:

qa1.url=qa1.com
qa1.log=qa.log
qa2.url=qa2.com
qa2.log=qa.log
prod.url=production.com
prod.log=prod.log

我想用[qa1,qa2,prod]填充下拉列表。正则表达式是最好的方法吗?

2 个答案:

答案 0 :(得分:3)

如果您确信环境是第一个,那么String Split方法将起作用:

String s = "qa1.url=qa1.com"
String r = s.split("\\.")[0] // should be 'qa1'

答案 1 :(得分:1)

是的,正则表达式可能是一个很好的方法。你也可以使用Scanner和set delimiter作为以dot开头直到行尾的所有内容(包括行分隔符):

Scanner sc = new Scanner(new File("input.txt"));
sc.useDelimiter("\\..*?(\r?\n|$)");

Set<String> set = new HashSet<>();
while (sc.hasNext()){
    set.add(sc.next());
}

或者在Java 8中我们可以使用Scanner实现Iterator的事实,因此它可以访问forEachRemining方法,这可以使这段代码更清晰

Scanner sc = new Scanner(new File("input.txt"));
sc.useDelimiter("\\..*?(\r?\n|$)");

Set<String> set = new HashSet<>();
sc.forEachRemaining(set::add);

或者我们可以将Iterable转换为流并使用其distinct方法来消除重复并收集结果列表如

List<String> collect = StreamSupport.stream(
                Spliterators.spliteratorUnknownSize(sc,Spliterator.ORDERED)
                , false)
        .distinct()
        .collect(toList());