2017-04-05 69 views
0

我在用下面的代码的问题,我不知道在哪里甚至开始:Java子字符串缺少字符?

   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); 

和正常工作的几个其他例子,除了这一个..为什么它踢“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) 
+1

如果'subjectPack'只有长度5,那么你不能访问索引位置6. – Adam

+0

正确的,但它应该拉160753,而不是60753. –

+0

为什么你得到'lastIndexOf'基于'message.getSubject ()'而不是'subjectPack'? –

回答

0

您从message.getSubject()

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 

提取subjectPack的PO但确定起始位置在一个侧面说明:你不需要调用.toUpperCase()两次 - 之前或之后.substring()操作就足够了。

+0

这就是答案。谢谢! –