假设我有一个字符串
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@")){}
哪个不起作用。
答案 0 :(得分:3)
您可以使用Pattern
Matcher
类来迭代字符串,以查找与您的正则表达式匹配的子字符串。然后,要替换已创建的子字符串,您可以使用appednReplacement
和appendTail
。要获得创建匹配,您可以使用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@