我有一个字符串,我想用其他一些字符替换所有出现的字符,例如,
这是我的段落,
bv xfeu xeelppuq vx t eupvtbf obfc, vktv bi ku twztds ofuz vku pbckv
vbnu vx hucbf uaupdvkbfc; bi ku ofuz zkx zupu vku pbckv juxjwu vx
wbsvuf vx, tfq zkxn vx taxbq; tfq, thxau tww, bi ku twztds ofuz zktv
zts vku nxsv bnjxpvtfv vkbfc vx qx, ku zxlwq fuaup itbw bf tfdvkbfc
ku nbckv lfqupvtou.
这是另一个String(String1)ETAONRISHDLFCMUGYPWBVKJXQZ
这是第3个字符串(String2)UVXFTKBSQPZNLCWDEIJHOAMGYR
我想要做的是逐一从String1
中选择一个字符,并将其替换为我段落中String2
中的一个字符。
例如,
所有E
必须替换为段落中的U
,并且所有T
都应替换为V
,依此类推。出于这个原因,我编写了以下程序,
String paragraph = "bv xfeu xeelppuq vx t eupvtbf obfc, vktv bi ku twztds ofuz vku pbckv
vbnu vx hucbf uaupdvkbfc; bi ku ofuz zkx zupu vku pbckv juxjwu vx
wbsvuf vx, tfq zkxn vx taxbq; tfq, thxau tww, bi ku twztds ofuz zktv
zts vku nxsv bnjxpvtfv vkbfc vx qx, ku zxlwq fuaup itbw bf tfdvkbfc
ku nbckv lfqupvtou."
String s1 = "ETAONRISHDLFCMUGYPWBVKJXQZ"
String s2 = "UVXFTKBSQPZNLCWDEIJHOAMGYR"
现在我正在替换它们,
for (int x = 0; x < 26; x++) {
paragraph = paragraph.replace(s1.charAt(x), s2.charAt(x));
}
E
中的所有paragraph
都应替换为U
,所有T
替换为V
,依此类推,但for循环前后的输出是一样的。
我做错了什么?
答案 0 :(得分:5)
paragraph
中的字符为小写。相比之下,s1
和s2
中的字符采用大写。 e
和E
不是同一个字符,因此当您搜索replace
时e
找不到并替换E
。
如果您将s1
和s3
中的字符设为小写,则可行:
String paragraph = "bv xfeu xeelppuq vx t eupvtbf obfc, vktv bi ku twztds ofuz vku pbckv vbnu vx hucbf uaupdvkbfc; bi ku ofuz zkx zupu vku pbckv juxjwu vx wbsvuf vx, tfq zkxn vx taxbq; tfq, thxau tww, bi ku twztds ofuz zktv zts vku nxsv bnjxpvtfv vkbfc vx qx, ku zxlwq fuaup itbw bf tfdvkbfc ku nbckv lfqupvtou.";
String s1 = "etaonrishdlfcmugypwbvkjxqz";
String s2 = "uvxftkbsqpznlcwdeijhoamgyr";
for (int x = 0; x < 26; x++) {
paragraph = paragraph.replace(s1.charAt(x), s2.charAt(x));
}
System.out.println(paragraph);
或者,当然,将paragraph
中的字符设为大写。
答案 1 :(得分:1)
如果你想一劳永逸地改变它们并且不改变每个循环的值,这里有一个方法,使用StringBuilder
附加新的字符并创建一个新的String
对象。
String paragraph = "bv xfeu xeelppuq vx t eupvtbf obfc, vktv bi ku twztds ofuz vku pbckv vbnu vx hucbf uaupdvkbfc; bi ku ofuz zkx zupu vku pbckv juxjwu wbsvuf vx, tfq zkxn vx taxbq; tfq, thxau tww, bi ku twztds ofuz zktv zts vku nxsv bnjxpvtfv vkbfc vx qx, ku zxlwq fuaup itbw bf tfdvkbfc ku nbckv lfqupvtou.";
String s1 = "etaonrishdlfcmugypwbvkjxqz";
String s2 = "uvxftkbsqpznlcwdeijhoamgyr";
StringBuilder sb = new StringBuilder();
for (int i = 0 ; i < paragraph.length() ; i++){
String temp = String.valueOf(paragraph.charAt(i));
if (s1.contains(temp)){
sb.append(s2.charAt(s1.indexOf(temp)));
} else{
sb.append(temp);
}
}
String output = sb.toString();
以下是output
的价值:
ho gnuw guuziiwy og v uwiovhn fhnl, oavo hb aw vjrvps fnwr oaw ihlao ohtw og qwlhn wxwipoahnl; hb aw fnwr rag rwiw oaw ihlao mwgmjw jhsown og, vny ragt og vxghy; vny, vqgxw vjj, hb aw vjrvps fnwr ravo rvs oaw tgso htmgiovno oahnl og yg, aw rgzjy nwxwi bvhj hn vnpoahnl aw thlao znywiovfw.
答案 2 :(得分:0)
将字符串s1
和s2
更改为小写字母。 paragraph
包含小写字符,而字符串s1
和s2
包含大写字符。