java开发中如何把字符串中的相同字符替换为不同的字符或字符串?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java开发中如何把字符串中的相同字符替换为不同的字符或字符串?相关的知识,希望对你有一定的参考价值。
有这样一个字符串:aa?aa?aaaaaaa?aaaaaaaa?aaaaa?aaaaaa?aa,现在需要把奇数位的“?”换成“<<”;把偶数为的“?”号换成“>>”.哪位师傅可以帮下忙!先谢谢了!
String str = "aa?aa?aaaaaaa?aaaaaaaa?aaaaa?aaaaaa?aa";String destStr = "";
String ss[] = str.split("?");
for (int i = 0; i < ss.length; i++)
if (i % 2 == 1)
destStr = destStr + ss[i] + ">>";
else if (i != ss.length - 1)
destStr = destStr + ss[i] + "<<";
System.out.println(destStr); 参考技术A 在Java中,String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll(),java开发推荐千锋教育,该机构实力强大,而且千锋的企业使命就是致力于帮助更多迷茫的学生实现他们的梦想,口碑很不错,值得选择。
学习Java的优势:
一、Java编程语言的入门门槛较低,适合大多数人学习虽然目前各大高校均将开设有即计算机应用专业。计算机专业的学生参加IT培训就是如虎添翼,毕业以后直接进入名企工作,这对普通本科生来说是非常珍贵的机会。
二、Java编程语言的应用范围广,适用性强IT培训之所以大力推荐Java编程培训,就是因为学习Java语言将来的就业方向比较广泛,学生可以有更多的职业选择。
三、Java编程语言的人才需求量很大,学习Java更好就业,虽然市场上Java技术人才众多,但是出类拔萃的Java工程师却是凤毛麟角。所以Java工程师的发展前景还是很值得期待的。这也是IT培训机构首推Java编程培训课程的一个原因。
想要了解更多关于java开发的相关信息,推荐咨询千锋教育。千锋教育成立教研学科中心,推出贴近企业需求的线下技能培训课程。课程包含html5大前端培训、JavaEE+分布式开发培训、Python人工智能+数据分析培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、网络安全培训、区块链培训、影视剪辑包装培训、游戏原画培训、全媒体运营培训。多样化选择,值得信赖。 参考技术B String str = "aa?aa?aaaaaaa?aaaaaaaa?aaaaa?aaaaaa?aa"; char[] ch = str.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < ch.length; i++) String temp = String.valueOf(ch[i]); if (temp.equals("?")) if ((i + 1) % 2 == 0) temp = ">>"; else temp = "<<"; sb.append(temp);
str = sb.toString();
如何用不同的字符替换字符串中的特定字符?
【中文标题】如何用不同的字符替换字符串中的特定字符?【英文标题】:How to replace specific characters in a String with different ones? 【发布时间】:2019-02-01 08:43:19 【问题描述】:给定一个
String text = "RHKKA";
如何有效地将所有'R'替换为'H',所有'H'替换为'E',所有 'K' 和 'L' 以及所有 'A' 和 'O'?
字符串文本将是HELLO
。
【问题讨论】:
你有整个字母表的映射,还是只有那些字母? 【参考方案1】:您可以创建一个字符映射作为键和值,然后像这样逐个字符循环:
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
【讨论】:
当然,你需要确保映射是完整的(足够),否则你的输出字符串会充满null
s。
另外也许值得指出的是,您不需要第一种方式的StringBuilder
,您可以从toCharArray()
更新char[]
,然后从中构建一个新字符串。 (或者用整个文本构造 StringBuilder,一次更新一个字符。有点相同的方法。)
@YCF_L 是的。对于第二部分,我的意思是你可以对 StringBuilder result = new StringBuilder(text)
和 charAt/set 做同样的事情,因为 StringBuilder
只是 char[]
的包装。
谢谢@AndyTurner 好主意,我用这个编辑我的答案
我希望我可以为 Java9 Map.of() 投票两次 ;-)【参考方案2】:
这是基于字符替换的另一种方法:
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
.. 而不是您在描述中的 E
。
【讨论】:
【参考方案3】:我认为最好的办法是创建一个新的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
【讨论】:
【参考方案4】:标准 Java 中没有这样的功能,但您可以查看 Apache Commons StringUtils.replaceChars,它一次性将组替换为另一个组,有效地执行与 Unix tr 命令相同的操作:
StringUtils.replaceChars("RHKKA", "RHKA", "HELE") = "HELLO".
【讨论】:
以上是关于java开发中如何把字符串中的相同字符替换为不同的字符或字符串?的主要内容,如果未能解决你的问题,请参考以下文章