需要使用Java用逗号和空格分割字符数

时间:2016-11-21 23:10:17

标签: java

您好我是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;。

感谢有人可以帮助我解决问题。

4 个答案:

答案 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数量就可以与其他值进行比较。