0

我正在尝试解析文本并从文本中获取值,例如:

Page 1 of 6

我正在考虑使用 java 提取结束编号。所以在这种情况下我的输出应该是 6。

我可以使用任何 java 字符串函数吗?(或)任何其他方式?

4

5 回答 5

15

您可以为此使用正则表达式(它比使用例如更安全String.split):

public static void main(String[] args) {

    String text = "Page 1 of 6";

    Matcher m = Pattern.compile("Page (\\d+) of (\\d+)").matcher(text);

    if (m.matches()) {
        int page  = Integer.parseInt(m.group(1));
        int pages = Integer.parseInt(m.group(2));

        System.out.printf("parsed page = %d and pages = %d.", page, pages);
    }
}

输出:

parsed page = 1 and pages = 6.
于 2012-08-20T14:08:46.310 回答
8

像这样的东西:

String s = "Page 1 of 6";
String[] values = s.split(" ");
System.out.println(Integer.parseInt(values[values.length - 1]));
于 2012-08-20T14:07:06.487 回答
2

我认为这是基本的字符串操作。你能做的就是这个..

    String pageNumberString = "Page 1 of 6"; 
    int ofIndex = pageNumberString.indexOf("of"); 
    int pageNumber = Integer.parseInt(pageNumberString.substring(ofIndex + 2));

我认为这应该有效。

于 2012-08-20T14:09:48.087 回答
2
Pattern p = Pattern.compile("(\\d+)$");
Matcher m = p.match("Page 1 of 6");
System.out.println(Integer.parseInt(m.group(1)));
于 2012-08-20T14:10:29.183 回答
0

只要您的数字格式保持相似,我就会使用正则表达式。

例如,这个将匹配任何带有 2 个数字的字符串(由任何非数字字符分隔),并捕获 2 个数字。

(\d+)[^\d]+(\d+)

注意:这将匹配一些奇怪的东西,比如“Page1of2”。它也不会匹配负数。并不是说您希望得到一个负页码。

于 2012-08-20T14:11:50.913 回答