Java 有没有办法把线放在向量上?

Java 有没有办法把线放在向量上?,java,regex,archive,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个表达式 有什么例子吗 谢谢。

我有一个问题,我正在用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个表达式

有什么例子吗


谢谢。

为此,我建议使用地图数据结构,而不是存储两个并行向量。如果出于某种原因需要保留文件中元素的顺序,可以使用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);
}
如果您希望稍后将正则表达式转换为编译的模式对象,那么这也很容易实现:

Map<String, Pattern> compiledRegexesByName = new LinkedHashMap<>();
for (Map.Entry<String, String> entry : regexesByName.entrySet()) {
  compiledRegexesByName.put(
      entry.getKey(), Pattern.compile(entry.getValue()));
}

为什么你特别想要一个向量?这对于映射来说似乎是一个更好的工作。这似乎是一个好主意,但我想要一个向量,因为我将用正则表达式做另一件事。特别是,我稍后将在向量的相同位置将正则表达式转换为java正则表达式。谢谢,您可能不想更改现有向量的值类型,因为这样会丢失类型安全性,而是创建具有正确类型的新向量。如果你这样做了,那么使用地图也同样有效。我在下面的回答中添加了一个例子。
String regex = regexesByName.get(name);
Map<String, Pattern> compiledRegexesByName = new LinkedHashMap<>();
for (Map.Entry<String, String> entry : regexesByName.entrySet()) {
  compiledRegexesByName.put(
      entry.getKey(), Pattern.compile(entry.getValue()));
}