String to int java.lang.NumberFormatException

时间:2014-05-19 11:38:26

标签: java string int

我有java程序将String转换为int,但当我转换{{1}时,String的范围是190520141618013381(在int的范围之上) } int被抛出

java.lang.NumberFormatException:

我的问题是编译器应该抛出StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(format.format(date)); stringBuffer.append(demandCount); int test_int = Integer.parseInt(stringBuffer.toString()); // exception has been fixed by putting //long abc_i = Long.parseLong(abc); log.info("test_int: "+test_int); (如果API中有此异常)而不是NumberOutOfRangException,则数字(java.lang.NumberFormatException:)的格式是正确的。

1 个答案:

答案 0 :(得分:2)

字符串190520141618013381超出了int的范围,但它也与int的可接受格式不匹配,因为它太长了。

编译器不会抛出此错误,它会在运行时抛出。

我认为遵守此方法的文档是正确的。

BTW不要使用StringBuffer,十年前它被StringBuilder取代了。

恕我直言,将日期存储为整数并不是一个好主意。


获得包含毫秒时间的唯一ID更有效的方法是做这样的事情。

 private static final AtomicLong TS_COUNTER = new AtomicLong();

 public static long nextTimeStamp() {
      long time = System.currentTimeMillis() * 1000;
      long curr = TS_COUNTER.get();
      if (curr < time && TS_COUNTER.compareAndSet(curr, time))
          return time;
      return TS_COUNTER.incrementAndGet();
 }

这将具有毫秒时间* 1000加上唯一ID。如果你的平均每秒不到一百万,那么这种方法很好。