如果我有一个类似下面的属性文件,那么制作“环境”字符串列表的最简单方法是什么?
假设:
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]填充下拉列表。正则表达式是最好的方法吗?
答案 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());