I want to use string in Java Replaceall (regex, regex) instead of (regex, string)
•
Java
Example:
input = "10N10N"; input = input.replaceAll("1|N","N|1"); // Syntax not correct
Expected output: n01n01
What I want to ask is that the single line iterator replaces all "1" with "n" and all "n" with "1"
Solution
Because the Java 9 matcher class contains replaceall (function < matchresult, string > replacer), you can dynamically specify what should be used as a replacement according to the current matching So your code might look like this:
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);
Output: n01n01
Before Java 9, you could use matcher #appendreplacement and matcher #appendtail instead of 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();
If you prefer to use external libraries, Apache Commons – Lang contains a stringutils class with replaceeach (string text, string [] searchlist, string [] replacementlist) methods You can use it as follows:
String input = "10N10N"; String replaced = StringUtils.replaceEach(input,new String[] {"1","N"},new String[] {"N","1"}); System.out.println(replaced);//N01N01
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码