2014-10-03 59 views
1

我有这样的代码:Java错误串

List<RFeeAtmbVO> list = RFeeAtmbBO.getInstance().listRFeeAtmb(mapParam, null); 
if (list != null && list.size() > 0) { 
    for (RFeeAtmbVO vo : list) { 
    vo.setIdFeeType(edit_biaya_jenisBiayaId.getValue()); 
    String name = edit_biaya_name.getValue().trim(); 
    if (vo.getName().indexOf("(Gagal Berbayar)") > -1) { 
     name = name.substring(0, name.indexOf(" (Gagal Berbayar)")) + " (Gagal Berbayar)"; 
     System.out.println("Hasilnya 1: "+name); 
    } else { 
     if (name.indexOf("(Gagal Berbayar)") > -1) { 
     name = name.substring(0, name.indexOf(" (Gagal Berbayar)")); 
     System.out.println("Hasilnya2 : "+name); 
     } 
    } 
    vo.setName(name); 
    vo.setSdate(edit_biaya_sdate.getValue()); 
    vo.setEdate(edit_biaya_edate.getValue()); 
    vo.setKodeFee(edit_biaya_kodeFee.getValue()); 
    vo.setMappingCode(edit_biaya_mappingCode.getValue()); 
    RFeeAtmbBO.getInstance().updateRFeeAtmb(vo); 
    } 
} 

当我在文本框中添加“(Gagal Berbayar)”中没有报价是没有问题的,并保存在数据库中,但添加一些文字没有“(Gagal Berbayar )”,我得到的错误是这样的:

[err] java.lang.StringIndexOutOfBoundsException: String index out of range: -1 
[err] at java.lang.String.substring(String.java:1904) 
[err] at controller.fee.fee.EditBiayaController.onClick$edit_biaya_btnSave(EditBiayaController.java:413) 

和413线是

name = name.substring(0, name.indexOf(" (Gagal Berbayar)")) + " (Gagal Berbayar)"; 

什么问题?可以帮助我吗?对不起,迟到的更新代码:)

+0

我认为你只是简单地需要在indexof上使用substracl 1。使用这个:substring(0,name.indexOf(“(Gagal Berbayar)”) - 1) – Csanesz 2014-10-03 08:59:56

+0

请简化您的代码示例并显示一些触发问题的示例输入。有很多我们不需要看到的代码 - 只关注子字符串并展示问题。 – 2014-10-03 09:03:24

+0

哪一行会引发错误? – Tirath 2014-10-03 09:08:07

回答

1

if条款你首先检查是否vo.getName()包含您的字符串(Gagal Berbayar)但后来执行,如果if计算结果为true块里面,你用不同的表达name工作的vo.getName()代替。不能保证name包含您的字符串,因此可能会失败。

你可以解决这个问题。

if (vo.getName().indexOf("(Gagal Berbayar)") > 0) { 
    name = vo.getName().substring(0, vo.getName().indexOf(" (Gagal Berbayar)")) 
     + " (Gagal Berbayar)"; 
    System.out.println("Hasilnya 1: "+name); 
} 

但是,如果某人刚刚进入(Gagal Berbayar)没有在它前面的空间呢?然后,您的if语句的计算结果为true,但该块内的indexOf返回-1,因为它找不到(Gagal Berbayar)(前面有一个空格)。

所以,你应该改变过:

String GAGAL = " (Gagal Berbayar)"; 

    if (vo.getName().indexOf(GAGAL) > 0) { 
     name = vo.getName().substring(0, vo.getName().indexOf(GAGAL)) + GAGAL; 
     System.out.println("Hasilnya 1: "+name); 
    } else { 
     if (name.indexOf(GAGAL) > 0) { 
     name = name.substring(0, name.indexOf(GAGAL)); 
     System.out.println("Hasilnya2 : "+name); 
     } 
    } 
0

这段代码name.indexOf(" (Gagal Berbayar)") 回报你-1。

negative indices are not allowed in substring method. 所以这是一个根本原因。

+0

我也觉得一样。但是如果'name'中有空格呢。例如 - '“asdf sf”.indexOf(“sf”)'和'“asdf sf”.indexOf(“sf”)'。我认为@ user3562918应该澄清'name'实际包含的内容。 – Tirath 2014-10-03 09:18:32