Java 在特定的其他子字符串之后获取子字符串的最有效方法
如果我有一个如下所示的字符串:Java 在特定的其他子字符串之后获取子字符串的最有效方法,java,regex,string,parsing,substring,Java,Regex,String,Parsing,Substring,如果我有一个如下所示的字符串: String text = "id=2009,name=Susie,city=Berlin,phone=0723178,birthday=1991-12-07"; 我只想要信息姓名和电话。我知道如何解析整个字符串,但在我的特定情况下,只获取这两个“字段”很重要 那么,让我的搜索方法执行以下操作的最佳/最有效的方法是什么: 搜索子字符串“name=”并返回它后面的子字符串(“Susie”),直到它到达下一个逗号 我的方法是: 获取“name=”first的最后一个
String text = "id=2009,name=Susie,city=Berlin,phone=0723178,birthday=1991-12-07";
我只想要信息姓名
和电话
。我知道如何解析整个字符串,但在我的特定情况下,只获取这两个“字段”很重要
那么,让我的搜索方法执行以下操作的最佳/最有效的方法是什么:
搜索子字符串“name=”并返回它后面的子字符串(“Susie”),直到它到达下一个逗号
我的方法是:
关于如何更有效地使用更精简的代码来实现这一点,还有其他建议吗?感谢您的任何输入您可以使用以下正则表达式捕获
phone
和name
之后的预期单词,并从匹配的对象中获取第一组:
(?:phone|name)=([^,]+)
关于下面的命令,如果它可能碰巧有一个单词包含phone
或name
,作为一种更全面的方式,您可以在名称前加一个逗号
(?:^|,)(?:phone|name)=([^,]+)
阅读有关正则表达式的更多信息正则表达式可能更有效,但为了可读性,我使用了
split
。如果您确实存在性能问题,请进行基准测试。使用模式
和匹配器
仅捕获名称=
和电话=
按拆分,
,按=
拆分,循环第一个数组,检查索引0
处第二次拆分的项目是否等于正在搜索的项目,并返回下一个拆分数组,以及索引1
处循环中的当前索引是什么。导致此正则表达式中断的一个极端情况是,存在以“name”或“phone”之类结尾的字段“用户名”和“手机”。好的,有人能告诉我如何在代码中使用这个正则表达式吗?(对不起,我知道基本知识,但这看起来有点太高级了…@Mattforsyth是的,请查看编辑。谢谢大家的关注。现在你有了另一个极端情况:当“手机”或“手机名”时,它将不起作用“是字符串中的第一对。:)我想你想要的是(?:^ |,)(?:phone | name)=([^,]+)
@lilisyn因为你没有提供任何代码,所以不是一个代码编写服务。我只是给出了这个答案作为提示,你可以搜索适当的java函数或方法来找到所有与此模式匹配的情况。
String text = "id=2009,name=Susie,city=Berlin,phone=0723178,birthday=1991-12-07";
final Map<String, String> infoMap = Splitter.on(",")
.omitEmptyStrings()
.trimResults()
.withKeyValueSeparator("=")
.split(text);
System.out.println(infoMap.get("name"));
System.out.println(infoMap.get("birthday"));