我有这样的代码:
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/