Java:用其他不同的字符替换一组字符
我应该制作一个自定义装饰器,这样我就可以在控制台输入和文件输入中进行替换:Java:用其他不同的字符替换一组字符,java,regex,char,Java,Regex,Char,我应该制作一个自定义装饰器,这样我就可以在控制台输入和文件输入中进行替换: 带有特定字符的一组字符(例如char[]x={'A',b'}和char y='*',因此A和b都变成* 一组字符和另一组成对字符(例如char[]x={'A',b'}和char[]y={'c',d'},因此A变成c,b变成d 最好的方法是什么?我用正则表达式(stringreplaceall=s.replaceAll(((a | b)”,String.valueOf(replacement));),但这不适用于第二种情况
char[]x={'A',b'}
和char y='*'
,因此A
和b
都变成*
char[]x={'A',b'}
和char[]y={'c',d'}
,因此A
变成c
,b
变成d
最好的方法是什么?我用正则表达式(
stringreplaceall=s.replaceAll(((a | b)”,String.valueOf(replacement));
),但这不适用于第二种情况。有没有办法在一个正则表达式中生成第二种情况?我应该做一个HashMap吗?首先在替换字符和替换字符之间创建某种映射会更容易。我的意思是
Map<String, String> map = new HashMap<>();
map.put("a", "c");
map.put("b", "d");
输出:cdcdef
Java9及以上版本的更新 在下面的模板中,我们通常只更改一件事,即决定使用什么替换已建立的匹配
StringBuffer sb = new StringBuffer();
while (m.find()){
m.appendReplacement(sb, /* decision about replacement*/ );
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
}
m.appendTail(sb);
String replaced = sb.toString();
因此,由于该逻辑的其余部分是重复的,因此该模板按照我们的要求进行包装,以提供为已建立匹配获取替换的逻辑。因此,上述代码可以简化为:
Map<String, String> map = new HashMap<>();
map.put("a", "c");
map.put("b", "d");
String demo = "abcdef";
Pattern p = Pattern.compile("[ab]");
Matcher m = p.matcher(demo);
String replaced = m.replaceAll(match -> map.get(match.group()));
System.out.println(replaced);
Map Map=newhashmap();
地图放置(“a”、“c”);
地图放置(“b”、“d”);
字符串demo=“abcdef”;
模式p=Pattern.compile(“[ab]”);
匹配器m=p.Matcher(演示);
替换字符串=m.replaceAll(match->map.get(match.group());
系统输出打印项次(替换);
首先在替换字符和替换字符之间创建某种映射会更容易
Map<String, String> map = new HashMap<>();
map.put("a", "c");
map.put("b", "d");
输出:cdcdef
Java9及以上版本的更新 在下面的模板中,我们通常只更改一件事,即决定使用什么替换已建立的匹配
StringBuffer sb = new StringBuffer();
while (m.find()){
m.appendReplacement(sb, /* decision about replacement*/ );
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
}
m.appendTail(sb);
String replaced = sb.toString();
因此,由于该逻辑的其余部分是重复的,因此该模板按照我们的要求进行包装,以提供为已建立匹配获取替换的逻辑。因此,上述代码可以简化为:
Map<String, String> map = new HashMap<>();
map.put("a", "c");
map.put("b", "d");
String demo = "abcdef";
Pattern p = Pattern.compile("[ab]");
Matcher m = p.matcher(demo);
String replaced = m.replaceAll(match -> map.get(match.group()));
System.out.println(replaced);
Map Map=newhashmap();
地图放置(“a”、“c”);
地图放置(“b”、“d”);
字符串demo=“abcdef”;
模式p=Pattern.compile(“[ab]”);
匹配器m=p.Matcher(演示);
替换字符串=m.replaceAll(match->map.get(match.group());
系统输出打印项次(替换);
DjMike
对于第二个,在替换过程中有帮助的是调用一个方法,该方法注入了逻辑,用不同的字符串替换不同的字符
PHP有一个很好的工具来完成这个任务,叫做preg_replace_callback()
对于第二个,在替换过程中有帮助的是调用一个方法,该方法注入了逻辑,用不同的字符串替换不同的字符
PHP有一个很好的工具来完成这项工作,名为preg_replace_callback()。链接的答案是关于的问题,在这里,这项工作对任何示例都是100%正确的
public static void main(String[] args) {
String test = "My name is Baba";
Character[] x = { 'a', 'b' };
StringBuilder sb = new StringBuilder();
sb.append("(");
for (int i = 0; i < x.length; i++) {
if (i == (x.length - 1)) {
sb.append(x[i] + ")");
} else {
sb.append(x[i] + "|");
}
}
System.out.println(sb.toString());
Character y = 'c';
Character[] y1 = { 'd', 'e' };
if (y.getClass().isArray()) {
for (int i = 0; i < y1.length; i++) {
test = test.replaceAll(x[i].toString(), y1[i].toString());
}
} else {
test = test.replaceAll(sb.toString(), String.valueOf(y.toString()));
}
System.out.println(test);
}
publicstaticvoidmain(字符串[]args){
String test=“我的名字是爸爸”;
字符[]x={a',b'};
StringBuilder sb=新的StringBuilder();
某人加上(“”);
对于(int i=0;i
在这里,这项工作对任何例子都是100%正确的
public static void main(String[] args) {
String test = "My name is Baba";
Character[] x = { 'a', 'b' };
StringBuilder sb = new StringBuilder();
sb.append("(");
for (int i = 0; i < x.length; i++) {
if (i == (x.length - 1)) {
sb.append(x[i] + ")");
} else {
sb.append(x[i] + "|");
}
}
System.out.println(sb.toString());
Character y = 'c';
Character[] y1 = { 'd', 'e' };
if (y.getClass().isArray()) {
for (int i = 0; i < y1.length; i++) {
test = test.replaceAll(x[i].toString(), y1[i].toString());
}
} else {
test = test.replaceAll(sb.toString(), String.valueOf(y.toString()));
}
System.out.println(test);
}
publicstaticvoidmain(字符串[]args){
String test=“我的名字是爸爸”;
字符[]x={a',b'};
StringBuilder sb=新的StringBuilder();
某人加上(“”);
对于(int i=0;i
有一种更快的方法:
public static void main(String[] args) {
String target = "ab";
String replacement = "**";
char[] array = "abcde".toCharArray();
for (int i = 0; i < array.length; i++) {
int index = target.indexOf(array[i]);
if (index != -1) {
array[i] = replacement.charAt(index);
}
}
System.out.println(array);
}
publicstaticvoidmain(字符串[]args){
字符串target=“ab”;
字符串替换=“**”;
char[]array=“abcde”.toCharArray();
for(int i=0;i
有一种更快的方法:
public static void main(String[] args) {
String target = "ab";
String replacement = "**";
char[] array = "abcde".toCharArray();
for (int i = 0; i < array.length; i++) {
int index = target.indexOf(array[i]);
if (index != -1) {
array[i] = replacement.charAt(index);
}
}
System.out.println(array);
}
publicstaticvoidmain(字符串[]args){
字符串target=“ab”;
字符串替换=“**”;
char[]array=“abcde”.toCharArray();
for(int i=0;i
似乎是非常好和简单的解决方案。虽然我已经选择了@Pashemo的答案并实现了它,但我会为您的努力加分。谢谢!似乎是非常好和简单的解决方案。虽然我已经选择了@Pashemo的answe