Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在特定的其他子字符串之后获取子字符串的最有效方法_Java_Regex_String_Parsing_Substring - Fatal编程技术网

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”),直到它到达下一个逗号

我的方法是:

  • 获取“name=”first的最后一个索引
  • 然后使用此索引作为解析方法的新起点

  • 关于如何更有效地使用更精简的代码来实现这一点,还有其他建议吗?感谢您的任何输入

    您可以使用以下正则表达式捕获
    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"));