检索<>内的多个数据或者{}阻止java中的字符串

时间:2012-07-04 06:16:55

标签: java regex

基本上我需要检索<>内的数据或者{}阻止java中的字符串。

字符串可能包含也可能不包含<>或{}标记。

该字符串可能包含多个<>或{}阻止。

<>内的数据和{}块基本上是变量或函数名。

    d1 = "1234";
    d2 = "5678";
    sampleString = "aaa<d1>aaa{d1}aaa<d2>aaa";

我需要结果与此类似。

    resultString = "aaa1234aaa4321aaa5678aaa";
提前谢谢。 :)

修改

我应该注意&lt;&gt;里面的值和{}块是动态的。

我可以

    sampleString = "aaa<d5>aaa{d1}aaa<d2>aaa";

意味着它将从属性/变量/参数/等获得值d5。

我应该从一开始就说过。 :P

5 个答案:

答案 0 :(得分:2)

嗯,这是一个经典的正则表达式任务,您可以使用Java中的Pattern和Matcher解决这个问题。 首先,考虑一下无论Java实现如何都需要捕获此字符串的正则表达式。 某种类型"(?:.*<(.*?)>.*)|(?:.*{(.*?)}.*)"应该可以帮助您捕获字符串。 您可以使用Matcher进行匹配并在while循环中运行,而Matcher的.find()方法不返回NULL(即字符串中仍然存在匹配)。 在循环中替换所需的组。

答案 1 :(得分:1)

    String d1 = "1234";
    String d2 = "5678";
    String sampleString = "aaa<d1>aaa{d1}aaa<d2>aaa";
    String finalStirng= sampleString.replaceAll("<d1>", d1).replaceAll("\\{d1\\}", d1).replaceAll("<d2>", d2).replaceAll("\\{d2\\}", d2);
    System.out.println("finalStirng= " + finalStirng);

{和}在Java正则表达方言中很特别。所以你应该逃避它们:"\\{d1\\}"

答案 2 :(得分:1)

首先,为您的值创建Map

Map<String, String> values = new HashMap<String, String>();
values.put("d1", "1234");
values.put("d2", "5678");

然后,找到所有匹配并替换它们:

Matcher matcher = Pattern.compile("<(.*?)>").matcher(text);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, values.get(matcher.group(1)));
}
matcher.appendTail(sb);

再次针对其他模式:

matcher = Pattern.compile("\\{(.*?)\\}").matcher(sb.toString());
sb = new StringBuffer();
while (matcher.find()) {
      matcher.appendReplacement(sb, new StringBuffer(values.get(matcher.group(1))).reverse().toString());
}
matcher.appendTail(sb);

答案 3 :(得分:0)

尝试这个

sampleString = sampleString.replaceAll("<d1>",d1).replaceAll("{d1}",new StringBuffer(d1).reverse().toString()).replaceAll("<d2>",d2);

答案 4 :(得分:0)

直接方法是使用前面提到的正则表达式

String resultString = "";  
resultString = sampleString.replaceAll("<d1>",d1);  
resultString = resultString.replaceAll("\\{d1\\}",d1);  
resultString = resultString.replaceAll("<d2>",d2);  

请注意,对于您所描述的特定情况,这可能会有效(虽然未经测试),但并非通用情景作为&lt;&gt;之间的字符。或{}标签可能会影响正则表达式。这取决于你的&lt;&gt;之间的关系。或{}标签。

最好考虑使用像&lt;。*&gt;这样的东西。作为你的正则表达式条件...