我必须将Strings的前2个字符转换为int。 问题是当一个字符串从09开始,它被转换为1,而年份看起来像2001而不是2009。
这就是我所拥有的,也许有更好的方法......
String s = longString.substring(0, 2); // 09asdasdas
int jahr = Integer.parseInt(s);
答案 0 :(得分:2)
......这一年看起来像2001年而不是2009年......
我不完全确定我的问题,但可能取决于您的打印方式。如有必要,以下代码打印前导0:
String longString = "09asdasdas";
String s = longString.substring(0, 2);
int jahr = Integer.parseInt(s);
System.out.printf("Year 20%02d.", jahr); // prints "2009"
与此代码段进行比较
String longString = "59asdasdas"; // <-- Changed to "59....."
String s = longString.substring(0, 2);
int jahr = Integer.parseInt(s);
System.out.printf("Year 20%02d.", jahr); // prints "2059"
(这是ideone demo。)
答案 1 :(得分:1)
没有必要摆脱领先的0,但如果你愿意,这是一种方法来做到这一点......
以下是如何摆脱前导0(如果有的话),对于从“00”到“99”(你的问题和子串(0,2)似乎意味着)的任何数字都可以正常工作:
Integer.parseInt(s.substring(0, 2).replaceAll("^[0]", ""));
答案 2 :(得分:0)
您使用前导零进行十进制操作。不好的做法,因为它可以解释为八进制数。你也提到了几年。如果您正在尝试操纵日期,请不要使用整数。使用像Joda time这样的库。我假设你需要类似的东西:
String string = "09asdasdas";
String dateString = string.substring(0, 2);
DateTimeFormatter formatter = DateTimeFormat.forPattern("YY");
DateTime date = formatter.parseDateTime(dateString);
System.out.println(date);
答案 3 :(得分:-2)
你最好的选择可能是检查第一个字符,如果是0,修剪它然后发送到Integrer.parseInt() - 如果我没记错的话,Integer.parseInt不喜欢许多因素(领先0,正在其中)我只是删除它。