有没有办法在矢量上放置线条?
问题描述:
我有一个问题,我做在Java中一个简单的程序,在一个txt文件中读取一个正则表达式是这样的:有没有办法在矢量上放置线条?
Name:{[A-z][0-9]}
Phone:{[0-9]}
但我正在寻找一种方式来拆分正则表达式的名称,把它放在一个向量:
(0) [Name:]
(1) [Phone:]
,它的内容正则表达式这样的另一种载体:
(0) [[A-z][0-9]]
(1) [[0-9]]
主要想法是分裂南e的正则表达式和正则表达式对txt归档的行分开的向量,但问题是这是一个n在txt文件上的表达式数量。
有没有例子?
谢谢。
答
为了达到此目的,我建议使用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()));
}
为什么你想要一个'Vector'?这对于Map来说似乎更好。 –
似乎是一个好主意,但我想要一个矢量,因为我会用特殊的正则表达式做另外一件事情,我将在后面将这个正则表达式转换为一个java正则表达式。谢谢 –
你可能不希望改变现有向量的值类型(因为这样你会失去类型安全性),而是用正确的类型创建一个新类型。如果你这样做,那么使用Map也可以。我在下面的答案中添加了一个示例。 –