嗨,我对Java是相对较新的。我必须比较金额值AED 555,439,972/yr的数量较小。因此,我尝试使用代码
进行拆分public static void main(String[] args) {
String value= "AED 555,439,972 /yr";
String[] tokens = value.split("b");
int[] numbers = new int[tokens.length];
for (int i = 0; i < tokens.length; i++) {
numbers[i] = Integer.parseInt(tokens[i]);
}
System.out.println(numbers);
}
但是我在线程" main" java.lang.numberformatexception中得到了例外:输入字符串:" AED 5555,439,972/yr"。
感谢有人可以帮助我解决问题。
希望您需要从字符串中获取数字值。
首先,使用以下内容删除所有非数字字符。
value.replaceAll("\D", "")
\D
代表非数字字符。一旦每个此类字符被空字符串替换(这意味着删除这些字符串),请在其上使用Integer.parseInt
。(如果值可以超出Integer
的范围,请使用Long.parseLong
。)
在您的代码中,您正在尝试按单词字符末端拆分字符串(也无法正确完成;您需要以\b
逃脱它)。这会给您一个数组,在每个单词末端分开字符串的结果(在AED之后,在AED之后,在AED之后,在第3位数字之后,第一个逗号之后等等。..),之后您转换了每个由此产生的数组组件中的整数将失败。
简而言之,以下是您想要的:
Integer.parseInt(value.replaceAll("\D", ""));
您的代码有一些错误:
String[] tokens = value.split("b");
" "需要逃脱,这样:
String[] tokens = value.split("\b");
这将使您在单词边界上分配您的输入。令牌数组中只有某些元素将是有效的数字,而其他元素将导致numberFormateXception。更具体地说,在索引2上,您将拥有" 555",在索引4处您有439,在索引6上,您可以有972。可以将其解析为整数,其他则不能。
我从堆栈溢出本身找到了一个解决方案
public static void main(String[] args) {
String line = "AED 555,439,972 /yr";
String digits = line.replaceAll("[^0-9]", "");
System.out.println(digits);
}
输出为555439972
您以错误的方式进行操作。这是一个格式的数字,所以以这种方式对待。
删除所有非数字字符,然后将其作为整数解析:
int amount = Integer.parseInt(value.replaceAll("\D", ""));
然后,您每年都有Dirhams的数量,您可以将其与其他值进行比较。