Html ファイルを表す文字列で、すべての相対リンクを絶対リンクに置き換えたいと考えています。次のメソッドを書きますが、うまくいきません。リンクの後にhttp://www.google.dehttp://www.google.de/resourceのような重複した baseurl が続きますか?
public static String replacePattern(URL targetUrl,String urlAsString,String patternString) throws IOException{
System.out.println(targetUrl.toString());
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(urlAsString);
Set<String> replacedStrings = new TreeSet<String>();
//return matcher.replaceAll(targetUrl.toString()+"$0");
while (matcher.find()) {
String relativeLink = matcher.group(1);
//System.out.println("Find Link " + relativeLink);
if(!replacedStrings.contains(relativeLink)){
//System.out.println("Relative Link " + relativeLink);
String newLink = targetUrl.toString() + relativeLink;
//System.out.println("New Link " + newLink);
urlAsString = urlAsString.replace(relativeLink,newLink);
replacedStrings.add(relativeLink);
}
}
return urlAsString;
}
UrlAsString は、コンテンツ全体を文字列として含む文字列です。私のパターンは
href=['\"](/[^'\"]+)['\"]
と
src=['\"](/[^'\"]+)['\"]