【问题标题】:Java extract substring from url stringJava从url字符串中提取子字符串
【发布时间】:2015-01-27 03:27:07
【问题描述】:

我想从 url 字符串中提取子字符串。 这是网址:

  https://test.tech.com/public/pi?id=635106391297495358_0_280740c3f281419b954b309b45a41d77-M_M_0_56b6f628b90b4146abbdba1de9095657

我想从 id=开始提取

  635106391297495358_0_280740c3f281419b954b309b45a41d77

直到破折号(-),然后提取剩余的子字符串

  M_M_0_56b6f628b90b4146abbdba1de9095657

请注意,确切的域不是上面的那个,这只是一个例子。

有什么想法吗?我很乐意感谢您的帮助。谢谢。

更新:

这是我到目前为止所做的:

  final URI uri = URI.create(result.getContents());
                    final String path = uri.getPath();
                    path.substring(path.lastIndexOf('-') + 1);
                    Log.e("EXTRACTED", "" + path);

但它只是公开/pi。

【问题讨论】:

  • Alrite,你有没有尝试过一些正则表达式?
  • @JunedAhsan 是的。我试过lastIndexOf。会更新我的帖子。

标签: java regex


【解决方案1】:

首先,uri.getPath() 返回路径组件,但您要查找的是在 ? 之后,因此您可能想尝试的是 uri.getQuery()

至于匹配:

Pattern p = Pattern.compile("id=(.+?)-");
Matcher m = p.matcher(uri.getQuery());
if (m.find()) {
    System.out.println(m.group(1));
}

未经测试,但我认为它应该可以工作。 (.+?) 是一个捕获组,它试图匹配 id=- 之间的字符。

【讨论】:

  • 那么正则表达式将类似于id=(.+?)-(.+),您将能够调用m.group(1)m.group(2);您可以随时查看MatcherPattern 的文档以获取更多帮助。很高兴它有效!
  • 感谢老兄的解释!
  • 没问题,我很高兴它有帮助。
【解决方案2】:

一个主要问题是:

 path.substring(path.lastIndexOf('-') + 1);

不会修改变量路径。原因是 String 是不可变的,对它们的任何更改都会在内部创建一个新字符串。如果要获取新的子字符串引用,则需要将其分配回path

 path = path.substring(path.lastIndexOf('-') + 1);

现在你可以尝试更多的子字符串选项

【讨论】:

  • @JunedAhsan 我还在公开/pi
  • @bEtTyBarnes 调试/跟踪您的代码。子字符串的变化将引导你到那里。
【解决方案3】:
final URI uri = URI.create("https://test.tech.com/public/pi?id=635106391297495358_0_280740c3f281419b954b309b45a41d77-M_M_0_56b6f628b90b4146abbdba1de9095657");
    String queryString = uri.getQuery(); 
    String subString =  queryString.substring(queryString.lastIndexOf('-') + 1);
    System.out.println("EXTRACTED " + subString);

生产:

提取的 M_M_0_56b6f628b90b4146abbdba1de9095657

【讨论】:

    【解决方案4】:

    这是解决方案,我希望它是不言自明的:

    public static void main(String[] argv) {
        final String uriStr = "https://test.tech.com/public/pi?id=635106391297495358_0_280740c3f281419b954b309b45a41d77-M_M_0_56b6f628b90b4146abbdba1de9095657";
        final URI uri = URI.create(uriStr);
        final String query = uri.getQuery();
        System.out.println(String.format("EXTRACTED QUERY [%s]", query));
        final String part1 = query.substring(query.indexOf('=')+1, query.indexOf('-'));
        System.out.println(String.format("EXTRACTED PART 1 [%s]", part1));
        final String part2 = query.substring(query.indexOf('-')+1);
        System.out.println(String.format("EXTRACTED PART 2 [%s]", part2));
    }
    

    }*

    这是输出: 提取查询 [id=635106391297495358_0_280740c3f281419b954b309b45a41d77-M_M_0_56b6f628b90b4146abbdba1de9095657]

    摘录第 1 部分 [635106391297495358_0_280740c3f281419b954b309b45a41d77]

    摘录第 2 部分 [M_M_0_56b6f628b90b4146abbdba1de9095657]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多