从字符串中删除所有非数字

时间:2019-01-08 13:06:19

标签: java regex numberformatexception

我正在实现一个可以键入任何字符的计算器。但是,我想从键入的内容中提取数字并将它们加在一起。

输入的示例可以是:

"//;\n1;2"

结果应为3。

我要执行的操作是将字符串中的每个非数字替换为空。

string.replaceAll("\\D", "");

当我随后打印字符串时,我得到:

//;
1;2

当我尝试将数字加在一起时,出现了异常:

java.lang.NumberFormatException: For input string: ""

我在做什么错了?

2 个答案:

答案 0 :(得分:4)

字符串是不可变的。一旦有了String对象,它的内容就永远不会改变。

要为您提供其他String,与所有其他类似方法一样,replaceAll()返回具有请求的更改的新String。它不会更改String的内容,这是不可能的。

您需要这样做:

string = string.replaceAll("\\D", "");

答案 1 :(得分:0)

例如。

  

请注意-这仅适用于间隔(包括)<0; 9>

中的数字
    String input = "//;\n1;2";

    //contains digits only
    String tmp = input.replaceAll("\\D", "");
    System.out.println("tmp is: " + tmp);

    //convert String to char array 
    char[] charsArray = tmp.toCharArray();
    int sum = 0;

    //iterate over and summarize
    for (int i = 0; i < charsArray.length; i++) {
        //needs to be there otherwise you will get crazy numbers 
        sum = sum + Character.getNumericValue(charsArray[i]);
    }

    System.out.println("sum is: " + sum);