如何替换特定位置的特殊字符



我想做的是将它替换为9,如果3写在数据中的第3个字符。但我只想对第三个字符这样做。我该怎么做呢?我编写的这段代码将字符串中的所有3替换为9。

问候……

String adana = "123456789133";
if (adana.length() > 2 && adana.charAt(2) == '3'){
final String newText = adana.replace("3", "9");
Log.d("TAG", "onCreate: " + newText);
}

你可以这样做:

final String newText = adana.replaceAll("3(?<=^\d{3})", "9");

我在这里使用的正则表达式使用正向查找来搜索在字符串的第3个位置出现的3。您可以使用replaceAll()replaceFirst(),因为它接受正则表达式。

尝试连接子字符串:

String adana = "123456789133";
if (adana.length() > 2 && adana.charAt(2) == '3') {
final String newText = adana.substring(0,2) + "9" + adana.substring(3);
Log.d("TAG", "onCreate: " + newText);
}

您的代码检查相对正确,但是您未能实际执行替换。当使用字符串的replace()方法时,java将做的是用第二个参数中传递的值替换作为第一个参数传递的所有事件。所以你所说的事情自然会发生。在这种情况下解决这个问题的一种方法是:

String adana = "123456789133";
StringBuilder newText = new StringBuilder();
for (int i = 0; i < adana.length(); i++) {
if (i == 2 && adana.charAt(2) == '3') {
newText.append('9');
} else {
newText.append(adana.charAt(i));
}
}

此策略适用于任何长度的字符串。

或者,如果您不想使用字符串构建器(在这种情况下不建议使用),您可以这样做:

String newText = "";
for (int i = 0; i < adana.length(); i++) {
if (i == 2 && adana.charAt(2) == '3') {
newText += "9";
} else {
newText += adana.charAt(i);
}
}

最新更新