簡體   English   中英

如何用不同的字符串替換字符串中的特定字符?

[英]How to replace specific characters in a String with different ones?

給出一個

String text = "RHKKA";

如何有效地替換所有“R”“H”,所有“H”“E”,所有“K”“O”“L”,所有“A”?

那么字符串文本就是HELLO

您可以創建一個Character of Character作為鍵和值,然后逐個字符循環,如下所示:

String text = "RHKKA";
Map<Character, Character> map = new HashMap<>();
map.put('R', 'H');
map.put('H', 'E');
map.put('K', 'L');
map.put('A', 'O');
char[] chars = text.toCharArray();
for (int i = 0; i < chars.length; i++) {
    chars[i] = map.get(chars[i]);
}
String result = String.valueOf(chars);
System.out.println(result.toString());//HELLO

Java8 +可能的解決方案

或者,如果您使用的是Java8 +,則可以使用:

String result = text.chars()
        .mapToObj(c -> String.valueOf(map.get((char) c)))
        .collect(Collectors.joining());//HELLO

Java9 +可能的解決方案

另一種可能的解決方案,如果使用Matcher :: replaceAll,如下所示:

String text = "RHKKA";
Map<Character, Character> map = Map.of('R', 'H', 'H', 'E', 'K', 'L', 'A', 'O');
text = Pattern.compile(".").matcher(text)
        .replaceAll(c -> String.valueOf(map.get(c.group().charAt(0))));//HELLO

您可以閱讀有關Map.of的更多信息

標准Java中沒有這樣的功能,但您可以查看Apache Commons StringUtils.replaceChars ,它可以一次性將組替換為另一組,實際上與Unix tr命令相同:

StringUtils.replaceChars("RHKKA", "RHKA", "HELE") = "HELLO".

我認為最好的辦法是創建一個新的StringStringBuilder ,方法是用正確的字符替換原始字符中的所有字符。
就像是:

String text = "RHKKA";
StringBuilder newString = new StringBuilder(text.length());

for (int i = 0; i < text.length(); i++) {
     char newChar = text.charAt(i);
     if (text.charAt(i) == 'R')
         newChar = 'H';
     else if (text.charAt(i) == 'H')
         newChar = 'E';
     else if (text.charAt(i) == 'K')
         newChar = 'L';
     else if (text.charAt(i) == 'A')
         newChar = 'O';
     newString.append(newChar);
}
System.out.println(newString); //prints HELLO

以下是基於字符替換的替代方法:

String text = "RHKKA";

String before = "RHKA";       // before mapping
String after  = "HELO";       // after mapping

String output = Arrays.stream(text.split(""))                   // Split by characters
    .map(i -> String.valueOf(after.charAt(before.indexOf(i))))  // Replace each letter
    .collect(Collectors.joining(""));                           // Collect to String

System.out.println(output);   // HELLO

順便說一句,我相信你的意思是用O代替A ..而不是你在描述中的E

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM