这实际上是来自 CodingBat 的练习。问题的定义如下:
给定一个字符串,如果字符串" del"出现在索引1处,返回一个字符串,其中" del"已被删除。否则,返回字符串不变。
- delDel(" adelbc")→" abc"
- delDel(" adelHello")→" aHello"
- delDel(" adedbc")→" adedbc"
我的工作如下:
public String delDel(String str) {
String del = "del";
if (str.indexOf(del, 1) == 1){
str.replaceFirst("del", null);
}
return str;
}
大多数情况都适用,但我在&#34; adelbc &#34;,&#34; adelHello <中得到 NullPointerException /强>&#34;和&#34; adel &#34;案例。我不太明白为什么。
答案 0 :(得分:4)
如果仔细查看OpenJDK源代码,您会注意到replaceFirst代理工作到regexp函数,包括用于替换步骤的函数;
public String replaceFirst(String replacement) {
if (replacement == null)
throw new NullPointerException("replacement");
reset();
if (!find())
return text.toString();
StringBuffer sb = new StringBuffer();
appendReplacement(sb, replacement);
appendTail(sb);
return sb.toString();
}
请注意,替换不能为null。我假设在JRE的其他实现中行为将类似。请使用""
- 空字符串 - 而不是null作为替换。
同样如cricket_007
的评论中所述,您希望保存replaceFirst
的结果以便返回,因为原始字符串不会受到影响(Java中的所有字符串都是不可变的)。最后一段代码:
public String delDel(String str) {
String del = "del";
if (str.indexOf(del, 1) == 1){
return str.replaceFirst("del", "");
}
return str;
}