我有这样的代码:

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


什么问题能帮我吗?对不起,我迟来了更新代码:)

最佳答案

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

10-04 15:10