2013-08-05 62 views
0

我有幾個字符串,其中多個掩碼。我想知道是否有更好的方式來處理字符串與掩碼解析,而不是String.spilt和循環標記和標識序列等。此代碼也變得笨拙,大量的令牌邏輯必須編碼。基於掩碼的字符串解析

樣品口罩可以是:

  1. PROD-LOC-STATE-CITY
  2. PROD-DEST-STATE-ZIP
  3. PROD-OZIP-DZIP-VER-INS

樣本字符串:

  1. CoolDuo-GROUND-NYC-10082

示例代碼:

String[] arr = input.split("-"); 
int pos = 0; 
for(String k:arr){ 

    if(pos == 0) { 
    //-- k is of PROD 
    ... 
    ... 
    } 
    .. 
    ... 

    pos++; 
} 

上述類型的代碼保存爲每個面具類型。

+0

向我們展示你的代碼,告訴我們它應該做什麼,以及爲什麼你覺得它很笨拙。 –

+0

您是否想過使用正則表達式來定義不同的格式,例如prod,ozip,dzip ... –

+0

我正在調查正則表達式類型,讓我們看看 – gpa

回答

7

您可以使用正則表達式組通過組名稱http://docs.oracle.com/javase/tutorial/essential/regex/groups.html獲取目標字符串。勾選此Regex Named Groups in Java

如果您無法使用命名組,你可以做這樣(如果你是在你的字符串結構絕對可靠):

final static int PROD_POS = 1; 
final static int STATE_POS = 3; 

... 

Pattern pattern = Pattern.compile("(some_regexp)-(some_regexp)-(some_regexp)"); 
Matcher matcher = pattern.matcher(input); 

if (matcher.matches()) { 
    String state = matcher.group(STATE_POS); 
} 
+0

命名組是新的jdk 7的一部分! :( – gpa

0

如果你真的想深入的比較當你的口罩變得太大而無法管理時,深深陷入這個問題中,你可以使用某種可用於java的詞法分析軟件包。

如果你想要得到的是什麼真正的意思看這裏的基礎(http://en.wikipedia.org/wiki/Lexical_analysis

一個流行的包在那裏for Java是JFlex的(http://jflex.de/),但也有很多人在那裏,只是谷歌它最好的結果!

祝你好運