如何只返回字符串中的数字

时间:2014-04-10 12:05:39

标签: java regex

我试图只获得一个字符串中的数字部分,该字符串在搜索查询后看起来像这样(找到142个项目,显示1到30) 我想只保存“142”供以后使用。

到目前为止,这是我的代码。

private UserSearchPage selectGutsPartner() {
    find(PARTNER).sendKeys(PARTNER_NAME);
    find(SEARCH_BUTTON).click();
    return new UserSearchPage(driver);
}

public String getItemsOnPage() {
    selectGutsPartner();
    return find(ITEMS_FOUND).getText();
}

public String getOnlyNumberOfItems() {
    Pattern pat = Pattern.compile("(//d+) items found, displaying *.");
    String text = getItemsOnPage();
    Matcher matcher = pat.matcher(text);
    System.out.println(matcher.group(1));
    return text;
}

但这个号码没有镶边。

感谢。

5 个答案:

答案 0 :(得分:3)

使用

String var="142 items found, displaying 1 To 30.";
return Integer.parseInt(var.split(" ")[0]);

答案 1 :(得分:1)

获取所有数字:

int i = Integer.parseInt("blah123yeah4yeah".replaceAll("\\D", ""));
// i == 1234

仅针对第一个数字:

int i = Integer.parseInt("x-42x100x".replaceAll("^\\D*?(-?\\d+).*$", "$1"));
// i == -42

这里已经回答:number out of string in java

答案 2 :(得分:1)

尝试

 Pattern pat = Pattern.compile("(\\d+) items found, displaying.*");

反斜杠,而不是正斜杠。在*前面的句点(因为*是"之前的事物的量词,并且你希望"事情"是"任何角色",不是"任何数量的空格"但你根本不需要它。如果你在items found停下来它会很好用(如果所有内容都安装在一个页面上,可能会改变消息,那么仍然有用):

 Pattern pat = Pattern.compile("(\\d+) items found");

答案 3 :(得分:1)

在这里使用java regex是一种工作方法

public String getOnlyNumberOfItems(String text) {
    Pattern pattern = Pattern.compile("^[0-9]+  items found, displaying*");
    Matcher textVerifyMatcher = pattern.matcher(text);

    if(textVerifyMatcher.find()){
        System.err.println("The text is not in the correct format");
        return null;
    }

    Pattern numPattern = Pattern.compile("^[0-9]+ ");
    Matcher m = numPattern.matcher(text);

    if(m.find()){
        text = m.group(0);
        System.out.println("Number: " + m.group(0));
    }
    return text;
}

如果给定的文本格式不正确,则该方法将返回null,但最好返回异常。

答案 4 :(得分:0)

导入com.google.common.base.CharMatcher; 导入com.google.common.base.Splitter;

公共课测试{

public static void main(String [] args){

String str = "142 items found, displaying 1 To 30";
Iterable<String> res = Splitter.on(CharMatcher.JAVA_LETTER).split(str);

}

}