2011-08-25 21 views
0

我有一个字符串,如下如何使用正则表达式中使用的Java

when 
    $Event:com.abc.Event(description == "abc") 
    then 
    logger.info("description"); 

我需要使用以下

when 
    $Event:com.abc.Event(description == "abc") from entry-point "EventStream" 
    then 
    logger.info("description"); 

替换上面的字符串以同样的方式时,我遇到

替换特定的字符串
when 
$Alarm:com.abc.Alarm(description == "abc") 
then 
logger.info("alarm description"); 

我需要改变如下

when 
$Alarm:com.abc.Alarm(description == "abc") from entry-point "AlarmStream" 
then 
logger.info("alarm description"); 

我想使用正则表达式使用贪婪匹配替换字符串。 请给我一些指示,以达到同样的效果。

回答

1

简单的解决方案不用麻烦正则表达式使用字符串方法包含代替。 制作一个Scanner对象,用于解析字符串行的行并将结果添加到字符串缓冲区。

if(line.contains("$Event:com.abc.Event(description == "abc")"){ 
    sb.append(line + "from entry-point \"EventStream\" "); 
} else if(line.contains("$Alarm:com.abc.Alarm(description == \"abc\")") { 
sb.append(line + "from entry-point \"AlarmStream\" "); 
}else { 
sb.append(line); 
} 
+0

感谢您的更新。但在我的情况下,问题是“.Event(”和“)”在第一种情况下,“.Alarm(”和“)”将保持不变,当部分,所以我不想去确切的字符串比较。 – mohan

+0

@gsr我已经为您做出了一个新的答案,看看是否符合您的要求。 – Farmor

0

将使用正则表达式和测试类的新答案。

import java.util.Scanner; 


public class RegEx { 

public static void main(String[] args) { 
    String text = "when\n$Alarm:com.abc.Alarm(description == \"abc\")\nthen\nlogger.info(\"alarm description\")"; 
    System.out.println(text); 
    StringBuilder sb = new StringBuilder(); 
    Scanner scan = new Scanner(text); 
    while(scan.hasNextLine()){ 
     String line = scan.nextLine(); 
     if(line.matches(".*\\.Alarm(.*).*")){ 
      line+=" from entry-point \"AlarmStream\""; 
     } 
     sb.append(line+System.getProperty("line.separator")); 
    } 
    System.out.println(); // Nicer output 
    System.out.println(sb.toString()); 
} 

}

输出

$报警:com.abc.Alarm(介绍== “ABC”)

然后

logger.info(“报警描述”)

$报警:com.abc.Alarm(说明== “ABC”),从入口点 “AlarmStream”

然后

logger.info( “报警内容”)