Java错误子串

标签 java string substring

我有这样的代码:

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,则在执行的 block 内,您使用不同的表达式 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,但 block 内的 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);
      }
    }

关于Java错误子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26176043/

相关文章:

java - Glob 语法不适用于 Windows PathMatcher

java - 在 Java 中向 MatOfPoint 变量添加值

c++ - 不使用标准函数反转字符串

Java subString 和 indexOf

java - Android游戏线程生命周期实现

java - 为什么我的 springboot 应用看不到 @Service 注解?

python - 将每个单引号/双引号替换为\' or\"

python - 将数据框列中每个单词的首字母大写

ios - 如何根据我的以下示例从 URL 字符串中获取子字符串?

sql - 获取SQL中前2个特殊字符之间的字符