如何用Java中的字符串替换任意字符?

时间:2017-07-04 19:05:06

标签: java string methods syntax charat

我正在尝试创建一个方法,用另一个字符串替换字符串中的单个字符到目前为止,这些是我的参数。

public static String replaceAt(String str,int position,String replacement)

当它正确运行时,它应该看起来像这样:

method         input                          output

replaceAt     "Hello, World", 5, " comma"     Hello comma World

这是我到目前为止所做的。

{
   String result = "";

  char character = str.charAt(position);

  str = str.replace(character, replacement);

  result = str;

  return result;
 }

但是我很确定我会以某种方式弄乱语法,有关如何继续的任何指示?

2 个答案:

答案 0 :(得分:2)

如果您可以使用StringBuilder,那么您可以使用输入str对其进行实例化,然后再调用StringBuilder#replace(int, int, String)

public static String replaceAt(String str, int position, String replacement) {
    return new StringBuilder(str).replace(position, position + 1, 
            replacement).toString();
}

如果您不能使用它,那么您可以使用String#substring(int, int)并连接您的输出,如

return str.substring(0, position) + replacement + str.substring(position + 1);

注意,内部使用StringBuilder来执行连接(至少在最近的Java版本中),所以它等同于

return new StringBuilder(str.substring(0, position)).append(replacement)
        .append(str.substring(position + 1)).toString();

(在非常旧版本中使用StringBuffer)。

答案 1 :(得分:1)

使用replace或其他搜索正则表达式的解决方案的最大问题是我们不知道该位置的字符是否是字符串中唯一的字符。假设输入字符串是"Hello, world, good morning"。然后,您的replaceAt将返回"Hello comma world comma good morning"。也许这就是你真正想要的东西(目前尚不清楚),但假装是一个用字符串“替换”给定“位置”的字符的方法,不应该做得更多。 (如果这真的是你想要的,我建议你改变名称和参数。)

假设您想要替换该位置的角色,而该位置的角色,我建议改为使用substring

public static String replaceAt(String str, int position, String replacement) {
    return str.substring(0, position) + replacement + str.substring(position + 1);
}

编辑:如果您要处理position ==字符串长度的情况,那么该位置没有字符:

public static String replaceAt(String str, int position, String replacement) {
    return str.substring(0, position) + replacement + (position == str.length() ? "" : str.substring(position + 1));
}

(如果position>字符串长度,第一个substring将不起作用。根据用例,如果不应发生此情况,您可以让它抛出异常或者你可以这样做:))

public static String replaceAt(String str, int position, String replacement) {
    return str.substring(0, Math.min(position, str.length())) + replacement + (position >= str.length() ? "" : str.substring(position + 1));
}