这段代码是几天前写的
String removeAll(char c, String s) {
String to_return = "";
while(true) {
if (s.equals(""))
return to_return;
// at this point s is not ""
char c2 = s.charAt(0);
if (c2 != c)
{
to_return += c2;
}
s = s.substring(1);
}
return to_return; // won't be reached
}
print(removeAll('o',"hello"));
差不多.. 从字符串中删除所有 'o'.. 但我自己做了,我应该只删除一次出现的字符..
谁能帮我移除一个?
最佳答案
一种有效的方法是使用 StringBuilder:
public static String removeFirst(char ch, String s) {
int charPos = s.indexOf(ch);
if (charPos < 0) {
return s;
}
return new StringBuilder(s).deleteCharAt(charPos).toString();
}
或者,连接字符之前的子字符串和字符之后的子字符串:
public static String removeFirst(char ch, String s) {
int charPos = s.indexOf(ch);
if (charPos < 0) {
return s;
}
return s.substring(0, charPos) + s.substring(charPos + 1, s.length());
}
或者使用内置的String方法replaceFirst():
public static String removeFirst(char ch, String s) {
return s.replaceFirst(Pattern.quote("" + ch), "");
}
注意事项:
replaceFirst()
方法使用正则表达式进行匹配,因此您应该确保正确引用字符以避免在正则表达式中有意义的特殊字符出现问题(例如$
).您可以使用
String.valueOf(ch)
而不是""+ ch
,但我发现它更冗长(虽然更“正确”) .如果您担心让这段代码变快,我会避免使用replaceFirst()
,因为它非常慢 - 每次运行时它都会在幕后将您的表达式编译成正则表达式模式。您应该将您的方法命名为
removeFirst()
而不是removeAll()
,否则下一位开发人员会感到非常困惑!
关于java - 如何删除字符串中出现的一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21609212/