从URL字符串中提取Java子字符串

4
我想从一个url字符串中提取子串。这是该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);

但它只是变成了public/pi。


1
你好,你尝试过什么吗?有用正则表达式吗? - Juned Ahsan
1
@JunedAhsan 是的。我尝试了lastIndexOf。我会更新我的帖子。 - user1410081
4个回答

2
首先,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 的文档获取更多帮助。很高兴它能够工作! - gengkev
谢谢你的解释,伙计! - user1410081
没问题,我很高兴能帮到你。 - gengkev

1
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


1
一个主要问题是:
 path.substring(path.lastIndexOf('-') + 1);

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

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

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

@JunedAhsan 我仍然在得到 public/pi - user1410081
@bEtTyBarnes 调试/跟踪你的代码。子字符串的变化将会带你到那里。 - Juned Ahsan

0

这里是解决方案,我希望它可以自我解释:

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]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接