你可以试试:
public static void main(String[] args) {
System.out.println(parse("2.1", 0));
System.out.println(parse("+2.1", 0));
System.out.println(parse("-1", 0));
System.out.println(parse("-1.2", 1));
System.out.println(parse("qwa56sdf", 3));
}
private static Double parse(String string, int index) {
if (string.charAt(index) == '-' || string.charAt(index) == '+') {
return null;
}
try {
return Double.parseDouble(string.substring(index).replaceAll("[^\\d.]", ""));
}
catch (NumberFormatException e) {
return null;
}
}
我不得不用 replace all 去除尾随的非数字字符,因为它们会导致 NumberFormatException 并且会为上一个示例中的输入返回 null 。
编辑:您在评论中的情况下工作的另一种选择可能是检查每个字符
private static Double parse(String string, int index) {
String finalString = "";
boolean foundSeparator = false;
for (char c : string.substring(index).toCharArray()) {
if (c == '.') {
if (foundSeparator) {
break;
}
else {
foundSeparator = true;
}
}
else if (!Character.isDigit(c)) {
break;
}
finalString += c;
}
if (finalString == "") {
return null;
}
return Double.parseDouble(finalString);
}