在尝试从字符串中提取数字时,我使用Long.parseLong()
方法遇到了一种非常奇怪的行为。
字符串包含多个数字,但只有一个(我需要)在问号内,所以我使用正则表达式提取它,然后我尝试将15位数字解析成一个长变量:
Pattern p = Pattern.compile("\"\\d+\"");
Matcher m = p.matcher(myString);
while (m.find()) {
String var1 = m.group();
var1 = var1.replace("\"", "");
try {
long var2 = Long.parseLong(var1);
return var2;
}
catch (Exception e) {
return -1L;
}
}
return 0L;
虽然我希望它返回var2
或抛出异常,但Long.parseLong(var1)
之后调用的下一行是return 0L
,我不明白为什么。我错过了什么吗?
感谢。
答案 0 :(得分:0)
我只是运行你的代码:
public static void main(String [] args) {
String myString = "abc 350 \"123451234512345\"";
System.out.println(doSth(myString));
}
public static long doSth(final String myString) {
final Pattern p = Pattern.compile("\"\\d+\"");
final Matcher m = p.matcher(myString);
while (m.find()) {
String var1 = m.group().replace("\"", "");
try {
return Long.parseLong(var1);
} catch (Exception e) {
return -1L;
}
}
return 0L;
}
我得到了:
123451234512345
Process finished with exit code 0
这可能是与.classess文件相关的问题。尝试重建你的项目(mvn clean / gradle clean / find。-type f -name" * .class" -exec rm -rf {} \;)。
我认为你的.class文件与.java文件中的代码不匹配。
答案 1 :(得分:0)
在将返回部分从while(m.find())
循环中取出时,代码按预期工作:
Pattern p = Pattern.compile("\"\\d+\"");
Matcher m = p.matcher(myString);
String var = "-1";
while (m.find()) {
var = m.group().replace("\"", "");
}
return Long.parseLong(var);
我无法理解它,因为它在打印时没有返回,并且在g-t的例子中也可以在循环中工作。如果你愿意详细说明这个案例,我想读一读。