2012-12-25 114 views
-1

我正在執行Android應用本地化的過程。此過程中的一個難點是區分用於向用戶顯示的字符串文本與本地/編程使用的字符串文本之間的區別。Eclipse正則表達式幫助,不包含子字符串

public static String PERSON = "Person"; 
intent.putExtra("isPerson", isPerson); 
myTextView.setText("My name is Mark"); 

什麼是正則表達式,我可以用它來給我,其中的文字用引號括起來,但1)不是一個變量聲明和2)不是用作一個字符串鍵一個鍵的代碼行/值映射像第二行一樣。理想的目標是讓表達式的匹配導致第三行的類型。我可以尋找包含的setText字符串但隨後硬編碼字符串,如下面將錯過:

String firstName = "Mark"; 
myTextView.setText(firstName); 

我設法得到非空的所有字符串由引號括起來:

\"\w{1,}" 

問題在於它太寬泛,給我一切。此外,我希望下面給我,不包含在putExtra他們所有的字符串退貨:

(?<!putExtra).\"\w{1,}" 

但可能是因爲其返回結果這樣不能很好地工作:

intent.putExtra("title", "Welcome"); 

當我想排除任何包含putExtra子字符串的文本行時,其中「Welcome」使其顯示爲匹配。

任何幫助您RegEx大師將不勝感激。我正在使用啓用了正則表達式的Eclipse的文件搜索功能

+0

不能理解你正在嘗試做什麼。 – mjosh

+0

我對Android沒有太多瞭解,但對我來說聽起來就像你試圖找到錯誤的東西。您可能應該嘗試搜索可顯示的任何類型組件的所有用法,然後嘗試將其縮小到導致實際進行可見更改的方法調用。有很多方法可以將字符串切碎,放在一起,然後繞過來認爲您可以準確找到要查找的字面值。 –

+0

@mjosh - 「區分用於顯示給用戶的字符串字面量與本地/編程使用的字符串字面量之間的區別」是我用正則表達式所要做的。 –

回答

0

您正試圖解決錯誤的問題。你的線

intent.putExtra("title", "Welcome"); 

不應該有一個文字字符串「標題」,而是一個命名常量。正如你至少使用「title」字符串兩次(當創建額外的信息,並在activity的onCreate方法中提取時),這應該是一個乾淨的代碼規則的命名常量,以避免幻數和字符串。

按照這種方法,基本上不需要識別正則表達式中的鍵/值設置器。

+0

謝謝Bananeweizen - 我看到你在說什麼,最好的做法是將常用字符串引用標準化爲常量。我希望可以通過RegEx避免這類字符串類型,但是在一個常量文件下洗牌可以使可翻譯用戶字符串的標識更容易。 –

+0

否不是恆定文件。常量是它們所屬類的一部分,就像正常(非常量)字段一樣。因此,字面字符串「標題」應該是使用它的活動的公共常量。 – Bananeweizen