2012-09-21 22 views
0

從本質上講,我要帶一堆:添加正則表達式匹配HashMap和訪問它們

<Cube currency="USD" rate="1.2954"/> 

並投入格式的一個HashMap:

String USD, String 1.2954 

我有以下代碼:

Map<String, String> list = new HashMap<String, String>(); 
Pattern p = Pattern.compile("<Cube\\scurrency='(.*)'\\srate='(.*)'/>"); 
Matcher matcher = p.matcher(currency_source); 
while (matcher.find()) { 
    list.put(matcher.group(1)); // PROBLEMATIC 
} 

我不知道如何正確地將貨幣和匯率添加到散列表。

+0

1.你的源代碼看起來像XML,那麼爲什麼你不只是一個XML解析器,並將它們添加到你的地圖中? 2. HaspMap使用鍵/值,matcher()返回一個String。 – MemLeak

回答

1

一個MapHashMap作品鍵值對模型,如果你想去的地方,我相信貨幣是你鍵添加鍵和值對和評價自己的價值,你會做這樣的,

map.put("$", matcher.group(1)); 

編輯:

儘量提高你的正則表達式,以便它爲您提供了兩個不同的組第一個是貨幣型,第二組是您的幣值把它放到你的地圖

map.put(匹配。格羅(1),matcher.group(2));

對於正則表達式代我使用TX2RE,用它來生成正確的正則表達式。

+0

問題是,我不應該把美元符號放在'currency =「[here]」'之間。我不知道如何訪問它。我嘗試了matcher.group(2),但它不起作用。 –

+0

@ ColorWP.com請參閱我編輯了我的答案,您的問題是您應該生成正則表達式,以便您獲得兩個邏輯組,一個用於類型,另一個用於其他值。 –

3

(我看你想使用正則表達式解析XML。也許你應該考慮使用XML解析器來代替,例如Is there an easier way to parse XML in Java?

首先,你的正則表達式是錯誤的,因爲(.*)太貪婪。將其更改爲:

Pattern p = Pattern.compile("<Cube\\scurrency='([^']*)'\\srate='([^']*)'/>"); 

使得'不會匹配。其次,.put() method只是在其2個參數中取得了關鍵和值。所以你可以使用:

list.put(matcher.group(1), matcher.group(2)); 
+0

謝謝。問題是'(。*)'貪婪。 –

+0

你有沒有把你的貨幣類型和貨幣價值附加在pamentalhesis中,即「()」使它成爲一個邏輯組,不是那麼容易? 偉大的答案@KennyTM –