无法替换String中的多个字符

时间:2015-10-11 12:47:33

标签: java string

我有一个字符串,我想用其他一些字符替换所有出现的字符,例如,

这是我的段落,

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循环前后的输出是一样的。

我做错了什么?

3 个答案:

答案 0 :(得分:5)

paragraph中的字符为小写。相比之下,s1s2中的字符采用大写eE不是同一个字符,因此当您搜索replacee找不到并替换E

如果您将s1s3中的字符设为小写,则可行:

Live Copy

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)

将字符串s1s2更改为小写字母。 paragraph包含小写字符,而字符串s1s2包含大写字符。