为什么我使用Integer.parseInt(String)时会出现NumberFormatException异常?

3

我觉得解决方案非常简单,但是我现在盯着它看了10分钟,却找不出我的代码中的任何错误。真的。

eventDateStart 是一个整数。整数通常需要8个字符才能将字符串转换为 int,我不明白为什么 Java 不能进行转换,我就像...唉??

代码产生 NumberFormatException 错误:

String rruleMonthday = "-1";

//where ar rrule is sth like --> RRULE:FREQ=MONTHLY;BYMONTHDAY=29
int firstMonthday = (rrule.indexOf("BYMONTHDAY=") + 11);

try {
rruleMonthday = rrule.substring(firstMonthday, rrule.indexOf(";", firstMonthday));
} catch (Exception ex) {
 rruleMonthday = rrule.substring(firstMonthday, rrule.indexOf("\n", firstMonthday));
}

eventDateStart = eventDateStart.substring(0, 6) + rruleMonthday;

System.out.println("eventDateStart: ." + eventDateStart + ".");


System.out.println("2: " + Integer.parseInt(eventDateStart)); //this Integer.parseInt conversion is printing numberformatexception 


输出:

eventDateStart: .20200329.

java.lang.NumberFormatException: For input string: "20200329"

1
eventDateStart.length() 的返回值是什么? - Progman
2
你很可能在“20200329”中有不可打印的字符。发布System.out.println(eventDateStart.codePoints().mapToObj(String::valueOf).collect(Collectors.joining(",")));将会打印什么? - Karol Dowbecki
事件开始日期长度(eventDateStart.length()):9以及 @karol: 50,48,50,48,48,51,50,57,13我还没有看出问题可能出在哪里? - Trendy Jewellery
1
13 是回车符。尝试修剪您的字符串 - Phil
我甚至已经加了一个“.”,但仍然看不到新行。该怎么让Java在没有新行的情况下修剪它? - Trendy Jewellery
显示剩余2条评论
1个回答

2
根据ASCII表,序列50,48,50,48,48,51,50,5720200329的值。在您的情况下,它后面跟着一个回车符号13
很可能您正在使用Windows,其中换行符序列为\r\n。请改用System.lineSeparator()使您的代码具有平台独立性:
} catch (Exception ex) {
    rruleMonthday = rrule.substring(firstMonthday, 
            rrule.indexOf(System.lineSeparator(), firstMonthday));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接