用Java替换单词中的第一个,中间和最后一个字母

时间:2015-11-10 23:59:35

标签: java string replace

我有一个包含数百个O,o的大文本。示例:

String s =“Hello world,One!”;

如果字母是Oo,如果它是单词中的第一个,最后一个和中间字母,我该如何替换它?

s.replace(“o”,“1”);

我希望:Hell1, w2rld, 3ne在我的所有文字中。此外,我希望有可能选择任何其他字母。

理想是如何选择单词中的第一个,中间和最后一个字母?

3 个答案:

答案 0 :(得分:2)

我可以想到这样做的几个方法,每个方法都需要一个循环,因为你要用变化取代它的价值,比如......

String s = "Hello world, two!";
int count = 1;
while (s.contains("o")) {
    s = s.replaceFirst("o", Integer.toString(count));
    count++;
}
System.out.println(s);

String s = "Hello world, two!";
StringBuilder sb = new StringBuilder(s);
int count = 1;
int index = -1;
while ((index = sb.indexOf("o")) != -1) {
    sb.replace(index, index + 1, Integer.toString(count));
    count++;
}
s = sb.toString();
System.out.println(s);

或者您可以使用String#split并将String重新拼接在一起,但它有点复杂

例如

答案 1 :(得分:1)

如果我理解你正确使用了正则表达式引擎或者来自Matcher类的更精确的方法:

  • appendReplace(StringBuffer sb, replacement) - 添加到缓冲区sb文本,该文本在匹配成立之前存在但不是匹配将添加replacement参数
  • 中描述的值
  • appendTail(StringBuffer) - 在最后一场比赛后添加缓冲文本的剩余部分。

演示:

String s = "Hello world, two!";

Pattern p = Pattern.compile("o",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(s);
StringBuffer sb = new StringBuffer();
int counter = 0;

while(m.find()){
    m.appendReplacement(sb, Integer.toString(++counter));
}
m.appendTail(sb);

String result = sb.toString();
System.out.println(result);

输出:Hell1 w2rld, tw3!

答案 2 :(得分:0)

String s = "Hello world, two!";
String before = s;
int i = 1;
while (!(s = before.replaceFirst("o|O", Integer.toString(i++))).equals(before)) {
    before = s;
}