Posted by: piman007 | 20-12-2007

Error bug ในคำสั่ง replaceAll

เมื่อกี้เจอ error ใน program genreport โดยนำข้อมูลที่ได้จาก user เป็นคน key เข้ามาผ่าน form และ gen ออกเป็น xml report
ตามที่ผมได้เขียน template เอาไว้ ผลปรากฎว่าเกิด error ขึ้นในบรรทัด replaceAll ลองเข้าไปตรวจดูก็ไม่พบเห็นความผิดปกติแต่อย่างใด
เนื่องจาก program ดังกล่าวได้ทำการตรวจสอบ และใช้งานมา 2 เดือนแล้ว
 
เมื่อลองนำข้อมูลใน database มา test ที่เครื่องปรากฏว่าเกิด error เหมือนกัน ก็เลยให้ printout ออกมา เจอครับว่าเกิด error ในส่วนของ
replaceAll ดังที่เล็งไว้จริงๆ
 
ส่วนที่เกิด error เกิดจากข้อมูลที่นำมา replace มี  "" ติดมาด้วย ขอเดาว่าเกิดจาก user ต้องการกด Enter แล้วก็พลาดไปโดนปุ่ม ""
อ่า ไม่น่าเลย ถึงว่าสิ Thread ของ AutoGen. report ผมถึงตายโดยไม่บอกกล่าว ผมเลยแก้ดังนี้
 
ขั้นแรก replaceAll "" ใน data ด้วย space ก่อน
จากนั้นยังไม่พอ ขอใช้คำสั่ง try….catch เพื่อป้องกันมันตายอีกที  ที่จริงน่าจะเกิดน้อยมาก
 
strValue    = items.get(c).toString().replaceAll("\\","");
try {
     strB = strB.replaceAll("\<tpl_value name\=""+strTplName+""\/\>",strValue);
}catch (Exception ex) {
     strB = strB.replaceAll("\<tpl_value name\=""+strTplName+""\/\>","n/a");
}
ตัวอย่าง error ครับ
 
[#|2007-12-20T08:59:10.921+0700|WARNING|sun-appserver-pe8.2|javax.enterprise.system.stream.err|_ThreadID=16;|Exception in thread "Thread-31" |#]
[#|2007-12-20T08:59:10.921+0700|WARNING|sun-appserver-pe8.2|javax.enterprise.system.stream.err|_ThreadID=16;|java.lang.StringIndexOutOfBoundsException: String index out of range: 13
 at java.lang.String.charAt(String.java:558)
 at java.util.regex.Matcher.appendReplacement(Matcher.java:696)
 at java.util.regex.Matcher.replaceAll(Matcher.java:806)
 at java.lang.String.replaceAll(String.java:2000)
 at com.kcs.amlo.report.ReportManager.prepareIterate(ReportManager.java:259)
 at com.kcs.amlo.report.ReportManager.prepareTemplate(ReportManager.java:166)
 at com.kcs.amlo.report.ReportManager.gen(ReportManager.java:46)
 at com.kcs.amlo.report.QueryReport.queryTable(QueryReport.java:85)
 at com.kcs.amlo.report.QueryReport.run(QueryReport.java:56)
 at com.kcs.amlo.report.ReportAutoRun.readTask(ReportAutoRun.java:95)
 at com.kcs.amlo.report.ReportAutoRun.run(ReportAutoRun.java:41)
 at java.lang.Thread.run(Thread.java:595)
|#]

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

หมวดหมู่

%d bloggers like this: