当前位置: 首页 > 知识库问答 >
问题:

Java从url字符串提取子字符串

堵才哲
2023-03-14

我想从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);

但它只是公开了/pi。

共有3个答案

林修真
2023-03-14
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_56B6F628B90B4146Abbda1De9095657

宰父劲
2023-03-14

一个主要问题是:

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

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

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

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

姚俊材
2023-03-14

首先,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=-之间匹配字符。

 类似资料:
  • 问题内容: 我正在尝试找到一种可靠的解决方案,以从字符串中提取URL。我有一个站点,用户可以在其中回答问题,并且可以在源框中输入他们的信息源,并允许他们输入网址。我想提取该URL并使其成为超链接。类似于Yahoo Answers的操作方式。 有谁知道可以做到这一点的可靠解决方案? 我发现的所有解决方案都适用于某些URL,但不适用于其他URL。 谢谢 问题答案: 约翰·格鲁伯(John Gruber

  • 在 String 中提供了两个截取字符串的方法,一个是从指定位置截取到字符串结尾,另一个是截取指定范围的内容。下面对这两种方法分别进行介绍。 1. substring(int beginIndex) 形式 此方式用于提取从索引位置开始至结尾处的字符串部分。调用时,括号中是需要提取字符串的开始位置,方法的返回值是提取的字符串。例如: 2. substring(int beginIndex,int e

  • 所谓字符串,指的就是字符的序列或者“串”。我们要在字符串上执行的第一个操作是提取所有字符中的一个。C++使用方括号([和])执行该操作: apstring fruit = "banana"; char letter = fruit[1]; cout << letter << endl; 表达式fruit[1]表明我们要从字符串变量fruit中取得编号为1的字符,并将结果保存在字符变量letter

  • 问题内容: 我有一个字符串,我想提取字符串中的(唯一)数字序列。 示例:helloThisIsA1234Sample。我想要1234 假设数字序列在字符串中只会出现一次,但不会出现在同一位置。 (对于那些会问的人,我有一个服务器名称,需要在其中提取一个特定的数字) 我想使用Apache commomns中的StringUtils类。 谢谢! 问题答案: 使用此代码号仅包含所需的输出。

  • 我有以下字符串 从上面,我需要提取下面的文字 第一个数字和文本之间总是有一个空格,所以2129和This is page1之间有一个空格。有时第一个数字被省略,就像2129不见了。文本和下一个数字之间总是有一个空格,所以在This is a Page1和6754001之间有一个空格,有时可能有两个空格。我只需要提取这些线这些线总是从空格开始,所以它可以 它们的后面总是有一个空格,有时是一个空格,有