Java子字符串缺少字符?
我对以下代码有问题,甚至不知道从哪里开始:Java子字符串缺少字符?,java,syntax,numbers,substring,Java,Syntax,Numbers,Substring,我对以下代码有问题,甚至不知道从哪里开始: System.out.println("Subject: " + message.getSubject()); subjectPack = message.getSubject().replaceAll("([,|!|@|$|&|%|^|*|;|:|<|>|\"|\'|(|)|/|\\|+])", "").replaceAll("[.](?![\\w]{2,4}$)",
System.out.println("Subject: " + message.getSubject());
subjectPack = message.getSubject().replaceAll("([,|!|@|$|&|%|^|*|;|:|<|>|\"|\'|(|)|/|\\|+])", "").replaceAll("[.](?![\\w]{2,4}$)", "").replaceAll("( )+|(\t)", " ");
System.out.println("Subject Line Length: " + subjectPack.length());
System.out.println("Subject: " + subjectPack);
subjectPack = subjectPack.toUpperCase().substring(message.getSubject().lastIndexOf("#")+1).toUpperCase();
System.out.println("PO Length: " + subjectPack.length());
System.out.println("PO: " + subjectPack);
subjectPack = subjectPack.substring(0,6);
您正在从
subjectPack
提取采购订单,但从message.getSubject()
另一方面,您不需要调用
.toUpperCase()
两次-无论是在之前还是之后。substring()
操作就足够了。如果subjectPack
的长度只有5,那么您就无法访问索引位置6。对,但它应该是160753,不是60753。为什么您要根据消息获取lastIndexOf
。getSubject()
而不是subjectPack
?subjectPack
没有“:”,但您使用的是消息.getSubject().lastIndexOf(#“)+1
和消息。getSubject()
没有分号。抱歉误解;这是因为您去掉了冒号“:”(正如@johnnymop指出的),但代码没有更新“#”的索引位置。字符串长度缩短了1,因此缺少第一个字符(本例中恰好是“1”)。这就是答案。谢谢
Subject: FW: Freight shifted on Turbana Load Po#160753
Subject Line Length: 44
Subject: FW Freight shifted on Turbana Load Po#160753
PO Length: 5
PO: 60753
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String ind
ex out of range: 6
at java.lang.String.substring(Unknown Source)
at picRead.PictureReader.sendmsg(PictureReader.java:191)
at picRead.PictureReader.main(PictureReader.java:116)
subjectPack.substring(message.getSubject().lastIndexOf("#")+1).toUpperCase();
// ^ you determine the starting position here
// ^ you are extracting from this string
// "FW: Freight shifted on Turbana Load Po#160753"
// "FW Freight shifted on Turbana Load Po#160753"
// you are extracting from ... ^ this position