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

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

问题描述:

我有一个问题,我做在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文件上的表达式数量。

有没有例子?

谢谢。

+2

为什么你想要一个'Vector'?这对于Map来说似乎更好。 –

+0

似乎是一个好主意,但我想要一个矢量,因为我会用特殊的正则表达式做另外一件事情,我将在后面将这个正则表达式转换为一个java正则表达式。谢谢 –

+0

你可能不希望改变现有向量的值类型(因为这样你会失去类型安全性),而是用正确的类型创建一个新类型。如果你这样做,那么使用Map也可以。我在下面的答案中添加了一个示例。 –

为了达到此目的,我建议使用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())); 
}