2017-05-25 121 views
0

希望能夠評論這是否是解析特定鍵的管道分隔字符串的最佳/推薦方式。
在對每個請求都運行此操作的低延遲系統中,效率非常高。從分隔字符串中提取

public String extractFields(String key,String comment){ 
     if(comment!=null){ 
      for(String test:comment.split("\\|")){ 
       if(test.contains(key)){ 
        return test.substring(test.indexOf(key)+key.length()).trim(); 
       } 
      } 
     } 
     return null; 
    } 
+2

我投票關閉這一問題作爲題外話,因爲它應該被張貼到codereview.stackexchange .com(更準確地說明輸入是什麼,輸出的是什麼,他的評論來自何處) –

+0

不相關,但我會檢查'comment == null'並且如果它是早返回,並且避免額外的嵌套和IMO使先決條件更容易被發現。 –

+0

如果你想使用split,使用一個已編譯的Pattern進行拆分,它只會被初始化一次,而不是'String :: split',因爲它每次調用都會編譯模式。任何採用正則表達式的情況都是如此。 – Novaterata

回答

0

嗯,拆分和搜索似乎有點沒有意義給我。

爲什麼不:

  • 關鍵的indexOf()得到它的位置,測試,如果這是有效的
  • 如果有效,從該位置,做indexOf()下一個|
  • 返回一個字符串的上述地區。
0

基於稔的答案,這裏是更快的方式實現做到這一點:

public String extractField(String key, String comment) { 
    if (key == null || comment == null) 
     return null; 
    int i = comment.indexOf(key); 
    if (i < 0) // Does not contain the key 
     return null; 
    String result = comment.substring(i + 1); 
    i = result.indexOf('|'); 
    if (i >= 0) 
     result = result.substring(0, i); 
    return result; 
} 
+0

你不需要做兩個'substrings',你可以在一個..中完成) – Nim

相關問題