gpt4 book ai didi

java - 解析非负 double

转载 作者:行者123 更新时间:2023-11-29 10:07:38 27 4
gpt4 key购买 nike

我需要的函数将采用字符串和整数来指示非负 double 或整数的位置,并返回数字或空值。如果有 '+' 则返回 null。

例子

2.1      , 0 -> 2.1
+2.1 , 0 -> null
-1 , 0 -> null
-1.2 , 1 -> 1.2
qwa56sdf , 3 -> 56

最优雅的方法是什么?谢谢。

更新我需要这样的代码,但更好)

    Number parse(String str, int pos){
Matcher m = Pattern.compile("^(\\d+(?:\\.\\d+)?)").matcher(str);
m.region(pos, str.length());
if(m.find()){
return Double.parseDouble(m.group());
} else {
return null;
}
}

最佳答案

你可以试试:

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;
}
}

我不得不用全部替换去除尾随的非数字字符,因为它们会导致 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);
}

关于java - 解析非负 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3601104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com