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

时间:2018-08-26 17:28:12

标签: java arrays string replace

给出

String text = "RHKKA";

如何有效地用'H'替换所有'R',用'E'替换所有'H' strong>,所有'K''L'以及所有'A''O'

则字符串文本为HELLO

4 个答案:

答案 0 :(得分:8)

您可以创建一个字符映射作为键和值,然后像这样逐个字符地循环遍历:

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

的更多信息

答案 1 :(得分:0)

标准Java中没有这样的功能,但是您可以查看Apache Commons StringUtils.replaceChars,它一次又一次地将组替换为另一个组,实际上与Unix tr命令的作用相同:

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

答案 2 :(得分:0)

我认为您最好的选择是通过用正确的字符替换原始字符来创建新的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

答案 3 :(得分:0)

这是基于字符替换的另一种方法:

const reply_msg = {
  text: "Do you mean you have some problems about blue screen?",
  expectResponse: true
}

export class Messages extends React.Component {
  render () {
    return (
      <div>
        <table className="message_table>
          {this.props.messages.map(msg =>
            <tr className="msg-class">
              <td>
                {msg.text}
                {msg.expectResponse &&
                  <ul>
                    <li><button onclick={this._handleOnClickYes}>Yes</button></li>
                    <li><button onclick={this._handleOnClickNo}>No</button></li>
                  </ul>
                }
              </td>
            </tr>
          )}
        </table>
      </div>
    )
  }
}

顺便说一句,我确定您打算将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 替换为A。而不是描述中的O