我希望在Java中以字符串形式获取整数。字符串是:
{{1}}
我希望得到值" 669",它介于_和"之间。我知道可以使用StringTokenizer,但我写的代码不太好。有没有更简单的解决方案呢?
答案 0 :(得分:4)
您可以使用Pattern和Matcher类通过正则表达式解决它。这是一个例子:
private static final Pattern PATTERN = Pattern.compile(".*_(\\d{3})\".*");
public static void main(String[] args) throws ParseException {
final String input = "<a target=\"_blank\" href=\"http://www.gazzetta.it/calcio/fantanews/statistiche/serie-a-2014-15/andrea_pirlo_669\">Pirlo A.</a>";
final Matcher m = PATTERN.matcher(input);
if (m.matches()) {
System.out.println(m.group(1));
} else {
System.out.println("No match");
}
}
正则表达式为.*_(\\d{3})\".*
:
.*
- &gt;任何数字(包括0)的任何字符
_
- &gt;字符_
(\\d{3})
- &gt; 3位数。括号告诉正则表达式引擎将此匹配保持为一个组,稍后将其称为组1(m.group(1)
)
\"
- &gt;双引号字符
.*
- &gt;任何数字(包括0)的任何字符
答案 1 :(得分:1)
此代码有效:
Pattern p = Pattern.compile(".*_(\\d+)\".*");
Matcher m = p.matcher(<yourstringhere>);
if (m.matches()) {
System.out.println(m.group(1));
}
要理解它,请查看正则表达式,例如: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
答案 2 :(得分:1)
或者你不能使用String split方法(它会在param中通过regex将splitted string作为数组返回)
">
_
array[array.length-1]
):)
答案 3 :(得分:1)
以下是使用Jsoup的解决方案:
public void extractNumber()
{
String s = "<a target=\"_blank\" href=\"http://www.gazzetta.it/calcio/fantanews/statistiche/serie-a-2014-15/andrea_pirlo_669\">Pirlo A.</a>";
Document document = Jsoup.parse(s);
System.out.println(document);
Elements elementsByTag = document.getElementsByTag("a");
String attr = elementsByTag.attr("href");
System.out.println(attr);
String sNumber = attr.substring(attr.lastIndexOf('_')+1);
System.out.println(Integer.parseInt(sNumber));
}
请注意,elementsByTag
是一个集合,您可能希望对每个<a />
的{{1}}属性进行迭代并执行