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())
。