java - 解析非负 double

标签 java string parsing double number-formatting

我需要的函数将采用字符串和整数来指示非负 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/

相关文章:

java - BigInteger 类型的方法 add(long) 不可见

java - 中级Java/Python开发人员的项目构想

mysql - Bash 从 96 个数据库导出不同的表

c++ - 为什么cout不显示字符串变量rnd?

json - SwiftyJSON 问题 Swift 2

java - 在interval.parse()中抛出异常

java - 无法从 JPA 实体在 MySql 中生成枚举类型

javascript - 从索引位置向后查找字符串中的空格

regex - 何时使用语法和编写解析器。使用语言特征正则表达式

php - 如何使用PHP解析Excel文件