我有一个问题,我在Java中创建一个简单的程序,在txt文件中读取这样的正则表达式:
Name:{[A-z][0-9]}
Phone:{[0-9]}
但我正在寻找一种方法来分割正则表达式的名称并将其放在矢量上:
(0) [Name:]
(1) [Phone:]
和另一个向前传出正则表达式的向量:
(0) [[A-z][0-9]]
(1) [[0-9]]
主要思想是将正则表达式的名称和正则表达式按txt存档的行拆分为分离的向量,但问题是txt文件中的 n 表达式数量。< / p>
有例子吗?
谢谢。
答案 0 :(得分:1)
我建议不要存储两个并行向量,而是建议使用Map
数据结构。如果由于某种原因需要保留文件中元素的顺序,可以使用LinkedHashMap
。例如:
Map<String, String> regexesByName = new LinkedHashMap<>();
for (String line : linesFromFile) {
int index = line.indexOf(':');
if (index < 0) {
throw new IllegalArgumentException("Cannot parse: " + line);
}
String name = line.substring(0, index);
String regex = line.substring(index + 1);
regexesByName.put(name, regex);
}
然后列举所有名称/正则表达式对,你可以这样做:
for (Map.Entry<String, String> entry : regexesByName.entrySet()) {
// entry.getKey() is the name, entry.getValue() is the regex
}
要查找给定名称的正则表达式,只需执行:
String regex = regexesByName.get(name);
如果你想要的是稍后将正则表达式转换为编译的Pattern
对象,那么这也很容易实现:
Map<String, Pattern> compiledRegexesByName = new LinkedHashMap<>();
for (Map.Entry<String, String> entry : regexesByName.entrySet()) {
compiledRegexesByName.put(
entry.getKey(), Pattern.compile(entry.getValue()));
}