1

我有如下字符串中的网址

http://www.example.com/abc?page=6
http://www.example.com/abc?page=66
http://www.example.com/abc?page=666

我想只提取页码,即只在“=”之后使用java中的字符串函数提取字符,但不知道如何做到这一点。请帮忙

谢谢

4

4 回答 4

17

当情况像在给定字符后得到任何东西一样简单时,您实际上并不需要正则表达式。

例子

String test = "http://www.example.com/abc?page=6";
String number = test.substring(test.lastIndexOf("=") + 1);
System.out.println(number);

输出

6

笔记

如果您的String不包含该=字符,则结果将是整个String.

这会发生,因为方法lastIndexOf将返回- 1,在示例中与它相加+1,因此返回0

简而言之,它将返回您的整个子字符串,String0原始String.

于 2013-05-24T18:21:00.053 回答
3

您可以使用String.substring method

   String result = input.substring(input.indexOf("=")+1);

附加信息

按照这里的java doc

public String substring(int beginIndex)

返回一个新字符串,它是该字符串的子字符串。子字符串以指定索引处的字符开始并延伸到该字符串的末尾。

于 2013-05-24T18:21:07.150 回答
2

可用于提取 URL(不仅是“页面”)内任何给定参数的整数值的解决方案是:

public static int extractIntFromURL(String url,String par) throws ParameterNotFoundInURLException{
    int number=0;
    Pattern p = Pattern.compile("[?&]"+par+"=([0-9]+)");
    Matcher m = p.matcher(url);
    m.find();
    try {
        number = Integer.parseInt(m.group(1));
    } catch (java.lang.IllegalStateException e){
        throw new ParameterNotFoundInURLException(url);
    }

    return number;
}

如果 URL 不包含 "page=" 如果抛出异常,则返回零是错误的,因为零可以是有效的页码。

你可以像这样使用它:

public static void main(String[] args) throws ParameterNotFoundInURLException {
    String url="http://www.example.com/abc?page=66&other=yes&filter=none";
    int pageNum = TheClass.extractIntFromURL(url,"page");
}
于 2013-05-24T18:47:10.157 回答
1

如果您的网址格式是固定的

String url = "http://www.example.com/abc?page=666";
String page = url.substring(url.lastIndexOf('=')+1);
System.out.println(page); // prints 666

如果以后可能有其他请求参数

String url = "http://www.example.com/book?id=101&page=60&bookmarks=on";
String page = url.split("\\?")[1].replaceAll(".*page=([^&]+).*", "$1");
System.out.println(page); // prints 60
于 2013-05-24T18:47:05.440 回答