我希望替换除第一个字符串以外的文本中出现的所有字符串。 例如:
输入:示例[2]这是一个示例文本。这是一个示例文本。这是一个示例文本。
替换了单词:sample(sImple)
输出:示例[2]这是一个示例文本。这是 sImple 文字。这是 sImple 文字。
在字符串函数中,我看到的是replace,replaceAll,replaceFirst。
我该如何处理这个案子。
提前致谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
这是一种天真的方法:
public static String replaceAllButFirst(String text, String toReplace, String replacement) {
String[] parts = text.split(toReplace, 2);
if(parts.length == 2) { //Found at least one match
return parts[0] + toReplace + parts[1].replaceAll(toReplace, replacement);
} else { //no match found giving original text
return text;
}
}
public static void main(String[] args) {
String x = "This is a sample test. This is a sample test. This is a sample test";
System.out.println(replaceAllButFirst(x, "sample", "simple"));
}
这将给出:
This is a sample test. This is a simple test. This is a simple test
答案 2 :(得分:0)
replaceAll
和replace
将替换所有子字符串(它们之间的差异是replaceAll
使用正则表达式作为参数,而replace
使用文字)。 replaceFirst
将仅替换与您要查找的模式匹配的第一个子字符串。你能做的是
indexOf(String str, int fromIndex)
方法确定第一个和第二个sample
字的索引,substring(int beginIndex)
关于第二个sample
的索引,以获取您想要替换的字符串的一部分replace
方法sample
字的索引之前)和部分替换值其他解决方案是使用appendReplacement
和appendTail
形式Matcher
类,并在找到第二个sample
字后使用替换值。它的代码看起来像
String yourString = "Example [2] This is a sample text. This is a sample text. This is a sample text.";
Pattern p = Pattern.compile("sample", Pattern.LITERAL);
Matcher m = p.matcher(yourString);
StringBuffer sb = new StringBuffer();
boolean firstWordAlreadyFound = false;
while (m.find()) {
if (firstWordAlreadyFound) {
m.appendReplacement(sb, "sImple");
} else {
m.appendReplacement(sb, m.group());
firstWordAlreadyFound = true;
}
}
m.appendTail(sb);
String result = sb.toString();
System.out.println(result);
输出:
Example [2] This is a sample text. This is a sImple text. This is a sImple text.
答案 3 :(得分:0)
另一种选择:
(?<=\bsample\b)(.*?)\bsample\b
替换:
$1yourstring
Java代码:
String s=input.replaceAll("(?<=\\bsample\\b)(.*?)\\bsample\\b", "$1yourString");
答案 4 :(得分:0)
尝试使用substring
和indexOf
方法将其分解为两个字符串,然后替换第二个字符串,最后将两个字符串追加回来
示例代码:
String str = "Example [2] This is a sample text. This is a sample text. This is a sample text.";
String findWhat = "sample";
int index = str.indexOf(findWhat) + findWhat.length();
String temp = str.substring(0, index + 1); // first string
str = str.substring(index + 1); // second string
//replace in second string and combine back
str = temp + str.replace(findWhat, "simple"); // final string
System.out.println(str);
将所有内容组合在一起:
int index = str.indexOf(findWhat) + findWhat.length();
str = str.substring(0, index + 1) + str.substring(index + 1).replace(findWhat, "simple");
答案 5 :(得分:0)
没有内置函数能够完全符合您的要求,无论是在String还是StringBuilder类中。你需要自己写。这是一个快速的方法:
private string ReplaceText(string originalText, string textToReplace, string replacementText)
{
string tempText;
int firstIndex, lastIndex;
tempText = originalText;
firstIndex = originalText.IndexOf(textToReplace);
lastIndex = tempText.LastIndexOf(textToReplace);
while (firstIndex >= 0 && lastIndex > firstIndex)
{
tempText = tempText.Substring(0,lastIndex) + replacementText + tempText.Substring(lastIndex + textToReplace.Length);
lastIndex = tempText.LastIndexOf(textToReplace);
}
return tempText;
}