需要使用Java将字符编号与逗号和空间分开

  • 本文关键字:空间 编号 Java 字符 java
  • 更新时间 :
  • 英文 :


嗨,我对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的数量,您可以将其与其他值进行比较。

最新更新