我有一个包含数百个O,o的大文本。示例:
String s =“Hello world,One!”;
如果字母是O
,o
,如果它是单词中的第一个,最后一个和中间字母,我该如何替换它?
s.replace(“o”,“1”);
我希望:Hell1, w2rld, 3ne
在我的所有文字中。此外,我希望有可能选择任何其他字母。
理想是如何选择单词中的第一个,中间和最后一个字母?
答案 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;
}