我想在Java中使用String.replaceAll(regex,regex)而不是(regex,S
发布时间:2020-12-15 04:49:32 所属栏目:Java 来源:网络整理
导读:例: input = "10N10N";input = input.replaceAll("1|N","N|1"); // syntax not correct 预期产量:N01N01 我要问的是单行迭代器将所有“1”替换为“N”而所有“N”替换为“1”. 解决方法 由于Java 9 Matcher类包含 replaceAll?(FunctionMatchResult,String
例:
input = "10N10N"; input = input.replaceAll("1|N","N|1"); // syntax not correct 预期产量:N01N01 我要问的是单行迭代器将所有“1”替换为“N”而所有“N”替换为“1”. 解决方法
由于Java 9 Matcher类包含
replaceAll?(Function<MatchResult,String> replacer) ,您可以根据当前匹配动态指定应该用作替换的内容.所以你的代码可能如下所示:
Map<String,String> replacementsMap = Map.ofEntries( Map.entry("1","N"),Map.entry("N","1") ); String input = "10N10N"; Pattern p = Pattern.compile("1|N"); Matcher m = p.matcher(input); String replaced = m.replaceAll(match -> replacementsMap.get(match.group())); System.out.println(replaced); 输出:N01N01. 在Java 9之前,您可以使用Matcher#appendReplacement和Matcher#appendTail代替replaceAll //create Pattern p,Matcher m and replacement map StringBuffer sb = new StringBuffer(); while(m.find()){ m.appendReplacement(sb,replacementsMap.get(m.group())); } m.appendTail(sb); String replaced = sb.toString(); 如果您愿意使用外部库,则Apache Commons – Lang包含具有 String input = "10N10N"; String replaced = StringUtils.replaceEach(input,new String[] {"1","N"},new String[] {"N","1"}); System.out.println(replaced);//N01N01 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |