如何使用NumberFormat仅解析默认语言环境中的有效数字

时间:2013-06-13 16:09:11

标签: java

我正在使用NumberFormat实例使用默认语言环境来解析文本。

如果字符串不是有效的数值,我必须返回0.问题是解析方法,根据Javadocs:

  

从给定字符串的开头解析文本以生成一个   数。该方法可能不会使用给定字符串的整个文本。

所以,如果我解析(我正在使用意大利语语言环境)“BAD 123,44”我正确得到ParseException并返回0,但如果我解析“123,44 BAD”,我得到的值为123.44,而在这种情况下我必须返回0。 更糟糕的是,如果我解析“123.44坏”,我得到价值12344!

 class RateCellReader {
      public static final NumberFormat NUMBER_FORMAT =
          NumberFormat.getNumberInstance(Locale.getDefault());

      ...

      try {
         number = NUMBER_FORMAT.parse(textValue);
      } catch (ParseException e) {
         number = 0;
      }

      ...
 }

如何对文本进行精确解析,或检查文本是否正确表示默认语言环境中的数字?

修改

受到@yomexzo链接的响应的启发,我改变了我的代码:

 class RateCellReader {
      public static final NumberFormat NUMBER_FORMAT =
          NumberFormat.getNumberInstance(Locale.getDefault());

      ...


      ParsePosition pos = new ParsePosition(0);
      number = NUMBER_FORMAT.parse(textValue,pos);
      if (textValue.length() != pos.getIndex())
          number = 0;


      ...
 }

1 个答案:

答案 0 :(得分:2)

这个怎么样

    boolean isValid;
    try {
        Number n = NUMBER_FORMAT.parse(s1);
        String s2 = NUMBER_FORMAT.format(n);
        isValid = s1.equals(s2);
    }catch(ParseException e) {
        isValid = false;
    }