给出
String text = "RHKKA";
如何有效地用'H'替换所有'R',用'E'替换所有'H' strong>,所有'K'和'L'以及所有'A'和'O'?
则字符串文本为HELLO
。
答案 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 +,则可以使用:
String result = text.chars()
.mapToObj(c -> String.valueOf(map.get((char) c)))
.collect(Collectors.joining());//HELLO
如果像这样使用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)
我认为您最好的选择是通过用正确的字符替换原始字符来创建新的String
或StringBuilder
。
像这样:
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
。