2017-02-20 109 views
0

我有一個問題,我做在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也可以。我在下面的答案中添加了一個示例。 –

回答

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())); 
} 
相關問題