2015-08-25 22 views
1

我正在從一個包中讀取文件屬性文件名的列表。 我需要更換文件內容是以下格式{en_GB==My name}將區域設置屬性名稱轉換爲正常名稱的最佳方法

我使用replaceAll方法來代替以下字符"{en_GB" and "}" 我可以具有任意數量的符號=和字符串"en_"可以與GB或AUUS等結束

什麼是最好的方法來取代這些?

String s = "{en_GB==kt!hibio}"; 
    System.out.println(s.replaceAll("[{\\W}]", "")); 
+1

能否請您發佈您的代碼?否則,不可能檢查你有什麼問題。 –

+0

如果'{en_GB ==我的名字}是你的輸入,你的輸出是什麼? – Kerwin

+0

我的輸出是「我的名字」 – MaheshVarma

回答

1

您可以使用

String s = "{en_GB==pm!name}"; 
System.out.println(s.replaceAll("\\{\\w+=+([^}]+)}", "$1")); 

IDEONE demo

正則表達式匹配

  • \\{ - 字面{
  • \\w+ - 1以上alphanume RICS或下劃線
  • =+ - 1個以上等號
  • ([^}]+) - 比賽和捕捉到第1組比}
  • }其他一個或多個字符 - 一個閉括號

當子匹配後,所有匹配的文本將被替換爲僅記錄到組1中的文本$1

,因爲你必須在正則表達式匹配是1個字符要麼是{或非字字符(\W)和文字}因爲你所包圍的表達成sqaure括號,由此形成character class您的解決方案是行不通的。現在

,因爲這正則表達式是相當通用的,你可能會進一步縮小其匹配能力是這樣的:

System.out.println(s.replaceAll("(?i)\\{en_[a-z]+=+([^}]+)}", "$1")); 

another demo

en_[a-z]+將被要求, - 爲(?i)使模式不區分大小寫 - 將匹配en_USEN_US

如果你知道有en_後僅2個字母,使用limiting quantifier{2}

System.out.println(s.replaceAll("(?i)\\{en_[a-z]{2}=+([^}]+)}", "$1")); 
+0

我的天啊!你是一個冠軍! – MaheshVarma

+1

我會添加評論爲什麼你的方法不起作用。 –

+0

正則表達式如何識別en_GB和en_US?還有什麼是1美元?對不起,我在這些正則表達式愚蠢 – MaheshVarma

相關問題