我目前想要在一行中完成所有这些:
String output = Pattern.compile("(\\r|\\n|\\t)").matcher(obj).replaceAll("");
Pattern.compile("[^\\p{Print}]").matcher(output).replaceAll(replacement);
但我无法做到以下几点:
Pattern.compile("(\\r|\\n|\\t)").matcher(obj).replaceAll("").Pattern.compile("[^\\p{Print}]").matcher(output).replaceAll(replacement);
如何才能使第二个正则表达式同时编译?
答案 0 :(得分:3)
如果“效率”意味着“少打字”,那么方法String.replaceAll(“regex”,“replacement”)可能适合您:
String output = obj.replaceAll("(\\r|\\n|\\t)", "").replaceAll("[^\\p{Print}]", replacement);
你失去了保留模式以供重用的能力,如果你不得不多次使用它,这实际上会更有效。
答案 1 :(得分:2)
由于第一行,output
基本上等同于
Pattern.compile("(\\r|\\n|\\t)").matcher(obj).replaceAll("")
因此,您可以使用output
替换第二行中的变量Pattern.compile("(\\r|\\n|\\t)").matcher(obj).replaceAll("")
。然后该线将成为
Pattern.compile("[^\\p{Print}]").matcher(Pattern.compile("(\\r|\\n|\\t)").matcher(obj).replaceAll("")).replaceAll(replacement);
然而,这并没有真正提高性能,并对可读性产生负面影响。除非你有充分的理由,否则最好只使用前两行。