我应该制作一个自定义装饰器,这样我就可以在控制台和文件的输入中替换它们:
char[] x = {'a', 'b'}
与char y = '*'
,因此a
和b
成为*
char[] x = {'a', 'b'}
与char[] y = {'c', 'd'}
,a
变为c
,b
变为d
} 最好的方法是什么?我使用正则表达式(String replaceAll = s.replaceAll("(a|b)", String.valueOf(replacement));
)创建了第一个,但这不适用于第二种情况。有没有办法在一个正则表达式中制作第二个案例?我应该做一个HashMap吗?
答案 0 :(得分:1)
首先在替换字符及其替换字符之间创建某种映射会更容易。我的意思是
Map<String, String> map = new HashMap();
map.put("a","c");
map.put("b","d");
然后您可以使用Matcher类中的appendReplacement
和appendTail
替换匹配的字符。决定如何获得替换角色可以像map.get(matchedCharacter)
一样完成。
简单演示
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);
StringBuffer sb = new StringBuffer();
while (m.find()){
m.appendReplacement(sb, map.get(m.group()));
}
m.appendTail(sb);
System.out.println(sb);
输出:cdcdef
答案 1 :(得分:1)
DjMike,
对于第二个,在替换过程中有用的是调用一个方法,用一个逻辑来注入,用不同的字符串替换不同的字符。
PHP有一个很棒的工具就是这个名为preg_replace_callback()的工具。关联的答案是关于Java equivalent of preg_replace_callback()
的问题答案 2 :(得分:1)
在这里,您可以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);
}
答案 3 :(得分:0)
有一种更快捷的方式:
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);
}