您好我是Java的新手。我必须比较金额值AED 555,439,972 /年是小于另一个金额。所以我试图先使用代码进行拆分
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);
}
但是我在线程&#34; main&#34;中得到了Exception。 java.lang.NumberFormatException:对于输入字符串:&#34; AED 555,439,972 /年&#34;。
感谢有人可以帮助我解决问题。
答案 0 :(得分:1)
希望您需要从字符串中获取数值。
首先,使用以下命令删除所有非数字字符。
value.replaceAll("\\D", "")
\\D
代表非数字字符。一旦每个这样的字符被替换为空字符串(这意味着删除了那些字符串),就在其上使用Integer.parseInt
。 (如果值超出Long.parseLong
的范围,请使用Integer
。)
在您的代码中,您尝试按字符结尾分割字符串(这也没有正确完成;您需要将其转义为\\b
)。这会给你一个数组,其结果是在每个单词结束时分割字符串(在AED之后,在AED之后的空格之后,在前3个数字之后,在第一个逗号之后,依此类推......),之后你转换每个生成的数组组件都是整数,这在AED会失败。
简而言之,以下是您想要的:
Integer.parseInt(value.replaceAll("\\D", ""));
答案 1 :(得分:0)
您的代码存在一些问题:
String[] tokens = value.split("\b");
&#34; \&#34;需要逃避,像这样:
String[] tokens = value.split("\\b");
这将在字边界上分割您的输入。只有标记数组中的某些元素才是有效数字,其他元素将导致NumberFormatException。更具体地说,在索引2处,您将拥有&#34; 555&#34;,在索引4处您将拥有439,而在索引6处您将拥有972.这些可以解析为整数,其他人不能。
答案 2 :(得分:0)
我从堆栈溢出本身找到了一个解决方案
public static void main(String[] args) {
String line = "AED 555,439,972 /yr";
String digits = line.replaceAll("[^0-9]", "");
System.out.println(digits);
}
输出为555439972
答案 3 :(得分:0)
你正在走错路。这是一个格式化的数字,所以请这样对待。
删除所有非数字字符,然后解析为整数:
int amount = Integer.parseInt(value.replaceAll("\\D", ""));
然后,您每年的dirhams数量就可以与其他值进行比较。