Java String Replace
时间:2020-02-23 14:35:14 来源:igfitidea点击:
Java String replace方法将所有旧的char或者旧的charsequence替换为新的char sequence并返回新字符串。
如果在字符串中没有替换,则会返回相同的字符串。
假设我们需要将"onitad"转换为"javatwoblog",我们可以简单地使用以下语法。
String result=input.replace("2", "Two");
语法
字符串替换方法有两个超载版本。
public String replace(char oldChar, char newChar) and public String replace(CharSequence target, CharSequence replacement)
例子
让我们在简单的例子的帮助下了解。
package org.igi.theitroad;
public class JavaStringReplaceMain {
public static void main(String[] args) {
String input="HelloWorld";
String result=input.replace('o', 'n'); //This code will replace 'o' to 'n' in String
System.out.println("HelloWorld converted to : "+result);
}
}
运行上面的程序时,我们将得到以下输出:
HelloWorld converted to : HellnWnrld
上面的程序将调用公共字符串替换(Char OldChar,Char NewChar)版本的替换方法。
package org.igi.theitroad;
public class JavaStringReplaceMain {
public static void main(String[] args) {
String input="How HashMap works in java";
String result=input.replace("Map", "Set");
System.out.println(result);
}
}
运行上面的程序时,我们将得到以下输出:
How HashSet works in java
上面的程序将调用公共字符串替换(Char OldChar,Char NewChar)版本的替换方法。
内部实现
公共字符串替换(Char Oudchar,Char Newchar)
/**
* Returns a string resulting from replacing all occurrences of
* {@code oldChar} in this string with {@code newChar}.
* If the character {@code oldChar} does not occur in the
* character sequence represented by this {@code String} object,
* then a reference to this {@code String} object is returned.
* Otherwise, a {@code String} object is returned that
* represents a character sequence identical to the character sequence
* represented by this {@code String} object, except that every
* occurrence of {@code oldChar} is replaced by an occurrence
* of {@code newChar}.
* Examples:
* "mesquite in your cellar".replace('e', 'o')
* returns "mosquito in your collar"
* "the war of baronets".replace('r', 'y')
* returns "the way of bayonets"
* "sparring with a purple porpoise".replace('p', 't')
* returns "starring with a turtle tortoise"
* "JonL".replace('q', 'x') returns "JonL" (no change)
*
* @param oldChar the old character.
* @param newChar the new character.
* @return a string derived from this string by replacing every
* occurrence of {@code oldChar} with {@code newChar}.
*/
public String replace(char oldChar, char newChar) {
if (oldChar != newChar) {
int len = value.length;
int i = -1;
char[] val = value; /* avoid getfield opcode */
while (++i < len) {
if (val[i] == oldChar) {
break;
}
}
if (i < len) {
char buf[] = new char[len];
for (int j = 0; j < i; j++) {
buf[j] = val[j];
}
while (i < len) {
char c = val[i];
buf[i] = (c == oldChar) ? newChar : c;
i++;
}
return new String(buf, true);
}
}
return this;
}
正如我们所看到的,上面的方法发现首次出现OldChar,然后找到剩余的字符串并用NewChar替换它。
公共字符串替换(CharSequence目标,CharSequence更换)
/**
* Replaces each substring of this string that matches the literal target
* sequence with the specified literal replacement sequence. The
* replacement proceeds from the beginning of the string to the end, for
* example, replacing "aa" with "b" in the string "aaa" will result in
* "ba" rather than "ab".
*
* @param target The sequence of char values to be replaced
* @param replacement The replacement sequence of char values
* @return The resulting string
* @since 1.5
*/
public String replace(CharSequence target, CharSequence replacement) {
return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
}
以上代码使用模式和匹配器来替换字符串。

