我有一个关于替换某些字符的问题。 我有一个x个字符的字符串,其中包含普通英语字母内的所有字符。
String x = "exampleString"
我的问题是,因为我要替换字符串中的字符,所以我无法用用户替换,因为它替换了以前替换的字符串,例如。
if(x.contains(e)){
x = x.replace("e","a")
}
这将替换上面字符串中的每个E字符。
我也在尝试使用:
x=x.replace("e","a").replace("a","b")
但这也将替换每个字符,即使以前替换过。 我虽然可以用,因为字符串在Java中是不可变的,但事实并非如此。
我还考虑了计数器,以查看何时替换了字符串并省略了替换的字符串,但是我无法实现这一点。
有人可以建议解决方案吗?
问候 编程新手。
答案 0 :(得分:1)
您可以尝试以下方法:
// Your String
String str = "exampleString";
// Convert it to a Character array.
char[] strCharArr = str.toCharArray();
// Have a corresponding boolean array
boolean[] arrStr = new boolean[str.length()];
// Character to be replaced
char a = 'r';
// Character to be replaced with
char b = 's';
// Loop through the array
for(int i = 0; i < strCharArr.length; i++) {
// Check if the characted matches and have not been replaced before.
if(strCharArr[i] == a && !arrStr[i]) {
strCharArr[i] = b;
arrStr[i] = true;
}
}
System.out.println(String.valueOf(strCharArr));
// Now if you need to replace again.
a = 's';
b = 'a';
for(int i = 0; i < strCharArr.length; i++) {
if(strCharArr[i] == a && !arrStr[i]) {
strCharArr[i] = b;
arrStr[i] = true;
}
}
System.out.println(String.valueOf(strCharArr));
此后,您可以将字符数组转换回相应的字符串。您可以编写一个函数并将其替换多次。
答案 1 :(得分:0)
问题是您要对整个字符串执行两次替换,因此一个位置要进行多次替换。您需要一个只对字符串循环一次的解决方案,以免被“ a”替换的“ e”不会被“ b”替换。
String x = "exampleString";
StringBuilder buf = new StringBuilder(x);
for (int i = 0; i < buf.length(); i++)
{
switch (buf.charAt(i))
{
case 'e':
buf.setCharAt(i, 'a');
break;
case 'a':
buf.setCharAt(i, 'b');
break;
}
}
System.out.println(buf.toString());
这使用StringBuilder
来实现可变性,并绕过replace
方法。无需跟踪已被替换的内容。每个字符最多只能执行一次替换。运行时输出:
axbmplaString