我试图只获得一个字符串中的数字部分,该字符串在搜索查询后看起来像这样(找到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;
}
但这个号码没有镶边。
感谢。
答案 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);
}
}