摘要:本文主要向大家介绍了java语言的正则匹配字符串实现多个目标子串,通过具体的代码向大家展示,希望对大家学习java语言有所帮助。
本文主要向大家介绍了java语言的正则匹配字符串实现多个目标子串,通过具体的代码向大家展示,希望对大家学习java语言有所帮助。
一个奇怪的需求,需要匹配到字符串里面的123e这样子的东西,并替换成123*e。比如3e / 21e这样子。
假如目标字符串是123efg45emkd89eqq,则替换之后的字符串应该是123*efg45*emkd89*eqq。
也就是说凡是数字和e的组合全部替换成数字和*e。
更新一下,如果仅仅是实现这个需求,完全不需要使用正则的。正则实在是鸡肋!
以下是更新内容(更优雅的实现!):
<code><code><code><code><code><code>public static String replaceE(String src) { if (src == null) return null; StringBuilder sb = new StringBuilder(); while (true) { int e = src.indexOf("e"); if (e > 0) { if (src.charAt(e - 1) >= '0' && src.charAt(e - 1) <= '9') { // need replace sb.append(src.substring(0, e)).append("*").append('e'); src = e + 1 < src.length() ? src.substring(e + 1) : ""; } else { sb.append(src.substring(0, e)).append("*").append('e'); src = e + 1 < src.length() ? src.substring(e + 1) : ""; } } else { break; } } return sb.toString(); }</code></code></code></code></code></code>
依然给出示例调用输出:
<code><code><code><code><code><code>System.out.println("adv34ertf --> "+replaceE("adv34ertf")); System.out.println("xs23e+xs4exs66etr5w3e87 --> "+replaceE("xs23e+xs4exs66etr5w3e87")); // 输出: adv34ertf --> adv34*e xs23e+xs4exs66etr5w3e87 --> xs23*e+xs4*exs66*etr5w3*e</code></code></code></code></code></code>
这里给出一个不太优雅的实现。毕竟Java的正则api不是很明朗,很多方法毫无卵用。搜关键字贪婪匹配毫无卵用!!!
<code><code><code><code><code><code><code>public static String regFinal(String src) { String target; while (true) { Object[] obj = regExNumberEOrigin(src); target = (String) obj[1]; // System.out.println("src= " + src + " , target= " + target); if (target.equals(src) || !(boolean) obj[0]) { break; } src = target; } return target; } private static Object[] regExNumberEOrigin(String src) { String regEx = "\\d+e"; Pattern p = Pattern.compile(regEx); Matcher m = p.matcher(src); boolean find = m.find(); if (find) { String found = m.group(); String number = found.substring(0, found.length() - 1); int start = src.indexOf(found); int end = start + found.length(); String target = number.concat("*").concat("e"); String ret = src.substring(0, start).concat(target).concat(src.substring(end)); return new Object[]{true, ret}; } return new Object[]{false, src}; }</code></code></code></code></code></code></code>
测试方法如下:
<code><code><code><code><code><code><code>public static void main(String[] args) { // System.out.println("regFinal xs23e+xs4exs66etr5w3e87 ==" + regExNumberEOrigin("xs23e+xs4exs66etr5w3e87")); System.out.println("regFinal xs23e+xs4exs66etr5w3e87 ==" + regFinal("xs23e+xs4exs66etr5w3e87")); System.out.println("regFinal adv34ertf ==" + regFinal("adv34ertf")); }</code></code></code></code></code></code></code>
输出如下:
regFinal xs23e+xs4exs66etr5w3e87 ==xs23*e+xs4*exs66*etr5w3*e87
regFinal adv34ertf ==adv34*ertf
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号