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

时间:2015-01-27 03:27:08

标签: java regex

我想从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。

4 个答案:

答案 0 :(得分: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=-之间的字符。

答案 1 :(得分:1)

一个主要问题是:

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

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

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

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

答案 2 :(得分: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

答案 3 :(得分: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]