Java - 一次替换多个字符串

时间:2013-11-20 23:27:23

标签: java string replace

所以我正在尝试编写一个带有String(str)并将其转换为NATO Phonetic Alphabet(newSentence)的程序。

这就是我的尝试:

newSentence = str.toLowerCase().replace("a", "Alpha ")
                               .replace("b", "Bravo ")
                               .replace("c", "Charlie ")
                               .replace("d", "Delta ")
                               .replace("e", "Echo ")
                               .replace("f", "Foxtrot ")
                               .replace("g", "Golf ")
                               .replace("h", "Hotel ")
                               .replace("i", "India ")
                               .replace("j", "Juliet ")
                               .replace("k", "Kilo ")
                               .replace("l", "Lima ")
                               .replace("m", "Mike ")
                               .replace("n", "November ")
                               .replace("o", "Oscar ")
                               .replace("p", "Papa ")
                               .replace("q", "Quebec ")
                               .replace("r", "Romeo ")
                               .replace("s", "Sierra ")
                               .replace("t", "Tango ")
                               .replace("u", "Uniform ")
                               .replace("v", "Victor ")
                               .replace("w", "Whiskey ")
                               .replace("x", "X-Ray ")
                               .replace("y", "Yankee ")
                               .replace("z", "Zulu ");

然而,这显然不起作用,因为它用“Alpha”取代每个“a”后,它将取每个“l”“p”和“h”并重新转换等等。有没有办法一次转换所有字母,这样就不会发生这种情况,并使其更有效率?

3 个答案:

答案 0 :(得分:2)

迭代创建一个新字符串:

StringBuilder outSB = new StringBuilder();
for(int i=0; i < str.length(); i++){
    if(str.charAt(i) == 'a' || str.charAt(i) == 'A') outSB.append("Alpha ");
    if(str.charAt(i) == 'b' || str.charAt(i) == 'B') outSB.append("Bravo ");
    // and so on
}
String output = outSB.toString();

答案 1 :(得分:1)

private static Map<Character, String> lookup = new HashMap<>();
public static void main(String[] args) {
    String input = "abc";
    StringBuilder sb = new StringBuilder();

    for(char c : input.toCharArray()){
        sb.append(lookup.get(c));
        sb.append(" ");
    }

    System.out.println(sb.toString());

}

static {
    lookup.put('a', "Alpha");
    lookup.put('b', "Bravo");
    lookup.put('c', "Charlie");
}

输出:

  

Alpha Bravo Charlie

创建一个查找表,并根据原始字符串中的每个字符构造一个新字符串。

答案 2 :(得分:0)

StringBuilder sb = new StringBuilder();
for (char c : str.toLowerCase().toCharArray()) {
    switch (c) {
        case 'a':  
            sb.append("Alpha ");
            break;
        case 'b':  
            sb.append("Bravo ");
            break;
        // and so on until Zulu...
        default:
            // optional: just pass through any character not in NATO alphabet
            sb.append(c);
            break;
    }
}