2016-02-27 75 views
2

給定一個字符串從輸入字符串獲取標記的最簡單方法是什麼?

abc=1&b=2&fa=_ 

我需要拆分它獲得令牌的數組:

["abc", "=", "1", "&", "b", "=", "2", "&", "fa", "=" , "_"] 

我的代碼:

public String[] getTokens(String input) { 
    List<String> list = new ArrayList<>(); 
    String[] splitted = input.split("&"); 

    for (int k = 0, splittedLength = splitted.length; k < splittedLength; k++) { 
     String part = splitted[k]; 
     String[] kv = part.split("="); 
     for (int i = 0, kvLength = kv.length; i < kvLength; i++) { 
      String elem = kv[i]; 
      list.add(elem); 
      if (i < kvLength - 1) { 
       list.add("="); 
      } 
     } 
     if (k < splittedLength - 1){ 
      list.add("&"); 
     } 
    } 

    return list.toArray(new String[list.size()]); 
} 

我還需要在我的鑰匙審理案件不能有一個值(=),在這種情況下,我應該設置一個默認值,以我的鑰匙 - 一個空字符串(a="")。

我該怎麼做?

+3

這取決於你的令牌的定義。 – Raedwald

+0

見http://stackoverflow.com/questions/11733500/getting-url-parameter-in-java-and-extract-a-specific-text-from-that-url從URL查詢字符串得到實例的地圖。 –

回答

0

你是對的,首先與「&」分開,然後用「=」分開,當第二個分割在索引1處沒有項目時,您知道沒有任何值,您可以將其設置爲emptyString。只需調試一個和另一個案例,你會找到正確的解決方案。

0

爲什麼不直接使用java.io.StreamTokenizer中:

public static String[] getTokens(String input) { 
    try { 
    ArrayList<String> result = new ArrayList<>(); 
    StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(input)); 
    while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) { 
     switch (tokenizer.ttype) { 
     case StreamTokenizer.TT_WORD: 
      result.add(tokenizer.sval); 
      break; 
     case StreamTokenizer.TT_NUMBER: 
      result.add(String.valueOf(tokenizer.nval)); 
      break; 
     default: 
      result.add(String.valueOf((char) tokenizer.ttype)); 
     } 
    } 
    return result.toArray(new String[result.size()]); 
    } catch (IOException e) { 
    throw new RuntimeException(e); 
    } 
} 

輸出爲您的例子中,返回值的Arrays.toString():

[abc, =, 1.0, &, b, =, 2.0, &, fa, =, _] 

關於第二個問題(=後的默認值):爲了簡單起見,我後處理中的第二循環中的令牌陣列(結果),並檢查是否=之後緊接着&或在端部,並且在這種情況下,插入件=令牌後的空字符串。

+0

我認爲你的解決方案不起作用。如果一個密鑰是'k1'會怎麼樣?然後標記器將它分成兩個元素('k'和'​​1'),這是錯誤的。 – user3633595

+0

那麼這種情況下,是不是你的問題的一部分... ...爲什麼你認爲StreamTokenizer極將k和1之間的分裂?來自javadoc:「一個詞彙標記由一個詞組成,後面跟零個或多個單詞組成或數字組成。」 –

相關問題