您好我有一个java文件,
- (UIImage*) addLayerTo:(UIImage*)source
{
CGSize size = [source size];
// create context with UIScrean scale
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
// get new context
CGContextRef ctx1 = UIGraphicsGetCurrentContext();
// draw view
CGContextDrawImage(ctx1, CGRectMake(0.0f, 0.0f, size.width, size.height), source.CGImage);
// set fill color
UIColor *fillColor = [UIColor purpleColor];
// fill with it
CGContextSetFillColorWithColor(ctx1, fillColor.CGColor);
CGContextFillRect(ctx1, CGRectMake(0, 0, size.width, size.height));
// create new image
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
// end context
UIGraphicsEndImageContext();
return outputImage;
}
现在你可以看到有两个while循环,一个while循环是空的,而另一个while循环有一些逻辑。
现在我想打印没有逻辑的while循环。换句话说,我想grep并打印没有任何逻辑的while循环。我怎么能grep多行。这样我就可以打印没有逻辑的while循环。
我试过这个:
public class Test {
public static void main(String args[]) {
int x = 10;
while( x < 5)
{
}
while( x < 20 ) {
System.out.print("value of x : " + x );
x++;
System.out.print("\n");
}
}
}
但它不匹配。
答案 0 :(得分:1)
使用awk在伪代码中执行类似的操作:
# get lines where loop starts
/(for|while)[ \t]*([^)]*)/ {
# save loop signature
loops[++i] = $0
while ($0 !~ /{/)
getline
getline
# store number of open braces
open=1
}
# when in loop count braces to see when we leave scope
open > 0 {
if ($0 ~ /{/)
open++
if ($0 ~ /}/)
open--
# if line is not a comment or empty, loop not empty
if ($0 !~ [ \t]*((\/\/|\*).*)?)
delete loops[i--]
}
END {
for (j=1; j<i; j++)
printf loops[j] "\n{\n}\n"
}
请注意,这是伪代码(读取未经测试且不完整),以便您了解如何实现目标。遇到麻烦时,你可以尝试一下并发表评论。还要注意,对于嵌套循环,策略会变得有点困难但是很容易绕过这个问题(提示:外部循环包含一个循环,因此当运行到内部循环时你可以忘记外部循环,因为它不是空的)