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

在Java中,如何用字符串替换任意字符?,java,string,methods,syntax,charat,Java,String,Methods,Syntax,Charat,我正在尝试创建一个方法,用另一个字符串替换字符串中的单个字符。到目前为止,这些是我的参数 公共静态字符串替换(字符串str、int位置、字符串替换) 当它正确运行时,应该是这样的: method input output replaceAt "Hello, World", 5, " comma" Hello comma World 这就是我目前所拥有的 { String result = ""; c

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

公共静态字符串替换(字符串str、int位置、字符串替换)

当它正确运行时,应该是这样的:

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;
 }

但我很确定我把语法搞乱了,有没有关于如何继续的建议

使用
replace
或其他搜索正则表达式的解决方案的最大问题是,我们不知道该位置的字符是否是字符串中唯一的字符。假设输入字符串是“你好,世界,早上好”。然后您的
replaceAt
将返回
“你好,逗号世界,逗号,早上好”
。也许这正是您真正想要的(还不清楚),但是一个假装用字符串“替换”给定“位置”的字符的方法不应该做更多的事情。(如果这确实是您想要的,我建议更改名称和参数。)

假设您希望替换该位置的字符,并且仅替换该位置的字符,我建议使用
子字符串

public static String replaceAt(String str, int position, String replacement) {
    return str.substring(0, position) + replacement + str.substring(position + 1);
}
编辑:如果要处理
位置
==字符串长度的情况,以便该位置没有字符:

public static String replaceAt(String str, int position, String replacement) {
    return str.substring(0, position) + replacement + (position == str.length() ? "" : str.substring(position + 1));
}
(如果
定位
>字符串长度,则第一个
子字符串
将不起作用。根据用例,如果不应该发生这种情况,您可以让它引发异常。或者您可以这样做:)


使用
replace
或其他搜索正则表达式的解决方案的最大问题是,我们不知道该位置的字符是否是字符串中的唯一字符。假设输入字符串是“你好,世界,早上好”。然后您的
replaceAt
将返回
“你好,逗号世界,逗号,早上好”
。也许这正是您真正想要的(还不清楚),但是一个假装用字符串“替换”给定“位置”的字符的方法不应该做更多的事情。(如果这确实是您想要的,我建议更改名称和参数。)

假设您希望替换该位置的字符,并且仅替换该位置的字符,我建议使用
子字符串

public static String replaceAt(String str, int position, String replacement) {
    return str.substring(0, position) + replacement + str.substring(position + 1);
}
编辑:如果要处理
位置
==字符串长度的情况,以便该位置没有字符:

public static String replaceAt(String str, int position, String replacement) {
    return str.substring(0, position) + replacement + (position == str.length() ? "" : str.substring(position + 1));
}
(如果
定位
>字符串长度,则第一个
子字符串
将不起作用。根据用例,如果不应该发生这种情况,您可以让它引发异常。或者您可以这样做:)

如果您可以使用,那么您可以使用您的输入
str
实例化一个,然后调用

如果您不能使用它,那么您可以使用并连接您的输出,如

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

如果可以使用,则可以使用输入
str
实例化一个,然后调用

如果您不能使用它,那么您可以使用并连接您的输出,如

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

谢谢,我运行的前两个测试使用了参数“Hello,World”,5,“逗号”和“Mary”,3,“ie”。但是当我尝试“Mary”,4,“ie”时,我得到的是Maryie而不是Marie。您提到的第二个代码返回了java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 at java.lang.String.substring(String.java:1931)at Strings.replaceAt(Strings.java:15)当我使用“Mary”,4,“ie”@Rod112
“Mary”运行它时出错
在位置4没有可以替换的字符。现在还不清楚为什么你会认为这是可行的。如果您的要求是4应与3相同,您必须将其视为特殊情况。@ajb您是对的,我仔细查看了它,认为这可能是我的错误,但可能是我用于运行多个测试的软件有问题。我不确定如何解释特殊情况,这还不是我们刚刚讨论过的内容。谢谢,我使用参数“Hello,World”,5,“逗号”和“Mary”,3,“ie”运行的前两个测试都有效。但是当我尝试“Mary”,4,“ie”时,我得到的是Maryie而不是Marie。您提到的第二个代码返回了java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1 at java.lang.String.substring(String.java:1931)at Strings.replaceAt(Strings.java:15)当我使用“Mary”,4,“ie”@Rod112
“Mary”运行它时出错
在位置4没有可以替换的字符。现在还不清楚为什么你会认为这是可行的。如果您的要求是4应与3相同,您必须将其视为特殊情况。@ajb您是对的,我仔细查看了它,认为这可能是我的错误,但可能是我用于运行多个测试的软件有问题。我不确定如何解释特殊情况,这还不是我们刚刚讨论的内容。谢谢,这在我运行的前两个测试中效果很好。但是,当我尝试以“Mary”,4,“ie”作为输入运行它时,我遇到了一个java.lang.StringIndexOutOfBoundsException:String索引超出范围:-1位于Strings.lang.String.substring(String.java:1931)位于StringsCodeCheck.main(StringsCodeCheck.java:15)的替换(Strings.java:15)位于StringsCodeCheck.main(StringsCodeCheck.java:52)错误