2017-05-25 91 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

相关问题