Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,如何在所有实例中用另一个符号替换字符串中多个位置的符号?_Java_String_Replace - Fatal编程技术网

在Java中,如何在所有实例中用另一个符号替换字符串中多个位置的符号?

在Java中,如何在所有实例中用另一个符号替换字符串中多个位置的符号?,java,string,replace,Java,String,Replace,我编写了一个方法,用给定字符串中的另一个符号替换给定符号的第一个实例 public static String myReplace(String origString, String oldValue, String newValue) { char[] chars = origString.toCharArray(); char[] charsNewValue = newValue.toCharArray(); StringBuffer sb = new String

我编写了一个方法,用给定字符串中的另一个符号替换给定符号的第一个实例

public static String myReplace(String origString, String oldValue, String newValue) {
    char[] chars = origString.toCharArray();
    char[] charsNewValue = newValue.toCharArray();

    StringBuffer sb = new StringBuffer();

    int startPos = origString.indexOf(oldValue);
    int endPos = startPos + oldValue.length();
    int lengthOfString = origString.length();
    if (startPos != -1) {
        for (int i = 0; i < startPos; i++)
            sb.append(chars[i]);
        for (int i = 0; i < newValue.length(); i++)
            sb.append(charsNewValue[i]);
        for (int i = endPos; i < lengthOfString; i++) 
            sb.append(chars[i]);
    } 
    else 
        return toReplaceInto;
    return sb.toString();
}
我想修改此方法,以便它将旧符号的所有实例替换为该字符串中给定的新符号

public static String myReplace(String origString, String oldValue, String newValue) {
    char[] chars = origString.toCharArray();
    char[] charsNewValue = newValue.toCharArray();

    StringBuffer sb = new StringBuffer();

    int startPos = origString.indexOf(oldValue);
    int endPos = startPos + oldValue.length();
    int lengthOfString = origString.length();
    if (startPos != -1) {
        for (int i = 0; i < startPos; i++)
            sb.append(chars[i]);
        for (int i = 0; i < newValue.length(); i++)
            sb.append(charsNewValue[i]);
        for (int i = endPos; i < lengthOfString; i++) 
            sb.append(chars[i]);
    } 
    else 
        return toReplaceInto;
    return sb.toString();
}
公共静态字符串myReplace(字符串origString、字符串oldValue、字符串newValue){
char[]chars=origString.toCharArray();
char[]charsNewValue=newValue.toCharArray();
StringBuffer sb=新的StringBuffer();
int startPos=origString.indexOf(oldValue);
int endPos=startPos+oldValue.length();
int lengthOfString=origString.length();
如果(startPos!=-1){
对于(int i=0;i
只需使用。它完全符合您的要求:

用指定的文字替换序列替换与文字目标序列匹配的此字符串的每个子字符串


稍微有点过时,但仅替换第一个匹配项的方法也比要求的复杂得多:

private static String replaceOne(String str, String find, String replace) {
    int index = str.indexOf(find);
    if (index >= 0)
    {
        return str.substring(0, index) + replace + str.substring(index + find.length());
    }
    return str;
}
测试:

System.out.println(replaceOne("find xxx find", "find", "REP")); // "REP xxx find"
System.out.println(replaceOne("xxx xxx find", "find", "REP"));  // "xxx xxx REP"
System.out.println(replaceOne("xxx find xxx", "find", "REP"));  // "xxx REP xxx"
System.out.println(replaceOne("xxx xxx xxx", "find", "REP"));   // "xxx xxx xxx"

您可以按如下方式使用替换方法:

origString = origString.replace(oldValue, newValue);

为什么不直接使用
String.replace
?看,已经有一个非常好的轮子了。基本上,这个问题可以用“RTFM”@JonSkeet来回答。就像任何新开发人员一样,他们可能想了解实际方法是如何构建的。我相信这只是一个深奥的练习?@Sen:考虑到Java1.4的历史,在问题中说明这一点是非常有用的。