简体   繁体   English

Java - 一次替换多个字符串

[英]Java - Replacing many strings at once

So I'm trying to write a program that takes a String (str) and converts it to NATO Phonetic Alphabet (newSentence). 所以我正在尝试编写一个带有String(str)并将其转换为NATO Phonetic Alphabet(newSentence)的程序。

This is what I tried: 这是我试过的:

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 ");

However, this obviously doesn't work since after it replaces every "a" with "Alpha," it'll take every "l" "p" and "h" and reconvert those and so on. 然而,这显然不起作用,因为它用“Alpha”取代每个“a”后,它将取每个“l”“p”和“h”并重新转换那些等等。 Is there some way to convert all of the letters at once so that this doesn't happen, and make it much more efficient? 有没有办法一次转换所有字母,这样就不会发生这种情况,并使其更有效率?

Create a new string iteratively: 迭代地创建一个新字符串:

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();
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");
}

Output: 输出:

Alpha Bravo Charlie 阿尔法布拉沃查理

Create a lookup table and construct a new string based on each character in your original string. 创建一个查找表,并根据原始字符串中的每个字符构造一个新字符串。

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;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM