2

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

如果字符串不是有效的数值,我必须返回 0。问题在于 parse 方法,根据 Javadocs:

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

所以,如果我解析(我使用的是意大利语语言环境)“BAD 123,44”,我会正确地得到一个 ParseException 并返回 0,但是如果我解析“123,44 BAD”,我会得到一个值 123.44,而我必须在这种情况下返回 0。更糟糕的是,如果我解析“123.44 BAD”,我得到的值是 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;


      ...
 }
4

1 回答 1

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;
    }
于 2013-06-13T16:21:18.457 回答