使用正则表达式替换FirstFirst

时间:2013-08-17 13:42:02

标签: java regex string replace

假设我有一个字符串

String link = "www.thisisalink.com/tick1=@tick1@&tick2=@tick2@&tick3=@tick3@&tick4=@tick4@";

然后我可以使用

link = replaceFirst("(.+)=@\\1@", "");

使其成为

link = "www.thisisalink.com/&tick2=@tick2@&tick3=@tick3@&tick4=@tick4@";

但我想循环使用String,以获取已替换的内容并将其保存在其他位置,如链接列表或数组...结果将是:

String[] result = ["tick1=@tick1@", "tick2=@tick2@", "tick3=@tick3@", "tick4=@tick4@"];
String link = "www.thisisalink.com/&&&";

但我怎么能这样做?我尝试用

循环
while (link.matches("(.+)=@\\1@")){}

哪个不起作用。

2 个答案:

答案 0 :(得分:3)

您可以使用Pattern Matcher类来迭代字符串,以查找与您的正则表达式匹配的子字符串。然后,要替换已创建的子字符串,您可以使用appednReplacementappendTail。要获得创建匹配,您可以使用Matcher实例中的group()

这是类似于你想要的东西

String link = "www.thisisalink.com/tick1=@tick1@&tick2=@tick2@&tick3=@tick3@&tick4=@tick4@";

StringBuffer sb = new StringBuffer();

Pattern p = Pattern.compile("(.+)=@\\1@");
Matcher m = p.matcher(link);
List<String> replaced = new ArrayList<>();

while (m.find()) {
    m.appendReplacement(sb, "");
    replaced.add(m.group());
}
m.appendTail(sb);
//to replace link with String stored in sb use link=sb.toString();
//otherwise link will be unchanged
System.out.println(sb);
System.out.println(replaced);

输出:

www.thisisalink.com/&&&
[tick1=@tick1@, tick2=@tick2@, tick3=@tick3@, tick4=@tick4@]

答案 1 :(得分:1)

这会产生你想要的字符串:

public static void main(String[] args)
{
    final String link = "www.thisisalink.com/tick1=@tick1@&tick2=@tick2@&tick3=@tick3@&tick4=@tick4@";
    final int index = link.indexOf("/") + 1;

    final String[] result = link.substring(index).split("&");
    final String newLink = link.substring(0, index) + repeat("&", result.length -1);
    System.out.println(newLink);
    for(final String tick : result)
    {
        System.out.println(tick);
    }
}

private static String repeat(final String toRepeat, final int repetitions)
{
    final StringBuilder sb = new StringBuilder(repetitions);
    for(int i = 0; i < repetitions; i++)
    {
        sb.append(toRepeat);
    }
    return sb.toString();
}

产地:

www.thisisalink.com/&&&
tick1=@tick1@
tick2=@tick2@
tick3=@tick3@
tick4=@tick4@