我正在实现一个可以键入任何字符的计算器。但是,我想从键入的内容中提取数字并将它们加在一起。
输入的示例可以是:
"//;\n1;2"
结果应为3。
我要执行的操作是将字符串中的每个非数字替换为空。
string.replaceAll("\\D", "");
当我随后打印字符串时,我得到:
//;
1;2
当我尝试将数字加在一起时,出现了异常:
java.lang.NumberFormatException: For input string: ""
我在做什么错了?
答案 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);