从分隔字符串中提取
问题描述:
希望能够评论这是否是解析特定键的管道分隔字符串的最佳/推荐方式。
在对每个请求都运行此操作的低延迟系统中,效率非常高。从分隔字符串中提取
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;
}
答
嗯,拆分和搜索似乎有点没有意义给我。
为什么不:
- 关键的
indexOf()
得到它的位置,测试,如果这是有效的 - 如果有效,从该位置,做
indexOf()
下一个|
- 返回一个字符串的上述地区。
答
基于稔的答案,这里是更快的方式实现做到这一点:
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
我投票关闭这一问题作为题外话,因为它应该被张贴到codereview.stackexchange .com(更准确地说明输入是什么,输出的是什么,他的评论来自何处) –
不相关,但我会检查'comment == null'并且如果它是早返回,并且避免额外的嵌套和IMO使先决条件更容易被发现。 –
如果你想使用split,使用一个已编译的Pattern进行拆分,它只会被初始化一次,而不是'String :: split',因为它每次调用都会编译模式。任何采用正则表达式的情况都是如此。 – Novaterata