有没有办法在矢量上放线?

时间:2017-02-20 19:23:14

标签: java regex archive

我有一个问题,我在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>

有例子吗?

谢谢。

1 个答案:

答案 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()));
}