Java 如何更有效地在单个字符串上调用replaceAll两次

Java 如何更有效地在单个字符串上调用replaceAll两次,java,regex,string,compilation,replaceall,Java,Regex,String,Compilation,Replaceall,我目前想在一行中完成这一切: 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.c

我目前想在一行中完成这一切:

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);

如何使第二个正则表达式同时被编译?

由于第一行,
输出基本上等同于

Pattern.compile("(\\r|\\n|\\t)").matcher(obj).replaceAll("")
因此,您可以将第二行中的变量
output
替换为
Pattern.compile(“(\\r\124;\\ n\124;\\ t)”).matcher(obj).replaceAll(“”
)。然后这条线就变成了

Pattern.compile("[^\\p{Print}]").matcher(Pattern.compile("(\\r|\\n|\\t)").matcher(obj).replaceAll("")).replaceAll(replacement);

然而,这并不能真正提高性能,并且对可读性有负面影响。除非你有很好的理由,否则最好只使用前两行。

因为第一行,
输出基本上等同于

Pattern.compile("(\\r|\\n|\\t)").matcher(obj).replaceAll("")
因此,您可以将第二行中的变量
output
替换为
Pattern.compile(“(\\r\124;\\ n\124;\\ t)”).matcher(obj).replaceAll(“”
)。然后这条线就变成了

Pattern.compile("[^\\p{Print}]").matcher(Pattern.compile("(\\r|\\n|\\t)").matcher(obj).replaceAll("")).replaceAll(replacement);
然而,这并不能真正提高性能,并且对可读性有负面影响。除非你有很好的理由,否则最好只使用前两行。

如果“效率”对你来说意味着“少打字”,那么方法String.replaceAll(“regex”,“replacement”)可能适合你:

String output = obj.replaceAll("(\\r|\\n|\\t)", "").replaceAll("[^\\p{Print}]", replacement);
您失去了保留模式以供重用的能力,如果您必须多次使用该模式,它实际上会更有效。

如果“效率”对您来说意味着“键入更少”,那么方法String.replaceAll(“regex”,“replacement”)可能适合您:

String output = obj.replaceAll("(\\r|\\n|\\t)", "").replaceAll("[^\\p{Print}]", replacement);

您将失去保留模式以供重用的能力,如果您必须多次使用该模式,实际上会更高效。

将事情放在同一条线上并不意味着它们同时发生,或者更高效。每个线程一次只能做一件事,编译器的工作是找出如何执行您要求的各个步骤。
inta=getanit()之间的性能没有差别;useAnInt(a)
getAnInt(useAnInt())
。将事情放在同一行并不意味着它们同时发生,也不意味着它们更有效。每个线程一次只能做一件事,编译器的工作是找出如何执行您要求的各个步骤。
inta=getanit()之间的性能没有差别;useAnInt(a)
getanit(useanit())