Java 减少函数参数之间空间的正则表达式

Java 减少函数参数之间空间的正则表达式,java,regex,function,whitespace,Java,Regex,Function,Whitespace,我有一个程序,试图比较两个文件 文件1: Void Function( Col1, Col2, Col3 ) 文件2: Void Function(Col1,Col2,Col3) 我应该使用什么regexp来删除空格并输入(和),因为我只想减少括号之间的空格,而不是代码中的任何其他位置。这是有问题的。任何纯Java正则表达式解决方案都必须妥协,因为要正确评估“我们在括号之间吗?”这一问题,需要我们(在最坏的情况下,取决于您的输入)处

我有一个程序,试图比较两个文件

文件1:

Void Function( Col1,
               Col2,
               Col3 )
文件2:

Void Function(Col1,Col2,Col3)

我应该使用什么regexp来删除空格并输入
,因为我只想减少括号之间的空格,而不是代码中的任何其他位置。

这是有问题的。任何纯Java正则表达式解决方案都必须妥协,因为要正确评估“我们在括号之间吗?”这一问题,需要我们(在最坏的情况下,取决于您的输入)处理嵌套括号、字符串中的文本或不应修改的注释,以及可能的其他边缘条件

记住这一点,可以使用一个简单的解决方案,该解决方案至少适用于您的示例(并且假设它不必处理嵌套的括号、注释或字符串,也不必检查括号是否真正属于函数定义)

String result = subject.replaceAll("\\s+(?=[^()]*\\))", "");

这将匹配并替换右括号后的下一个括号中的空格。

可能重复的@Smutje:这两个问题根本没有关系。@Smutje我不认为它是重复的。。。这是一个排除问题(只替换那里,但不替换他的代码的其余部分。你认为呢?我明白了,我们需要更多的指导:如果我认识到要解决的问题,它是同一代码的两个副本之间的差异,其中一个副本在多行上有函数参数,但另一个可能没有,那么两次通过的方法可能是唯一完整的解决方案。我我以前不得不这么做,但这并不是什么有趣的事情;使用特殊正则表达式来解析一种具有实际语法的编程语言会使您暴露在字符串或注释中的误报。我的解决方案是一个将行连接成一行的预过程,这需要一个预过程。