- PR -

JSPにて文字列中の"http://"の判別について

1
投稿者投稿内容
delix
会議室デビュー日: 2005/10/13
投稿数: 14
投稿日時: 2005-10-17 23:53
文字列中の"http://"から始まる文字列にリンクを張るような
プログラムを作っているのですが、このように変換するプログラムを探しましたが
見つかりません。
自分で実装しようと思ったのですが、どうしてもうまくいきません。
以下が実装したコードです。

//httpアドレスをリンクできるよう変換
String[] haire=new String[50];
StringBuffer sbb=new StringBuffer();
int l=0;
int len=naiyou.length()-7;
boolean dou=false;

String ar="";
try{
BufferedReader br=new BufferedReader(new StringReader(naiyou));
while((ar=br.readLine())!=null){
ar=ar+"e";//eはsubstring用です

for(int i=0,j=0,k=0;i<ar.length();i++){
j=ar.indexOf("http://",i);

if(j>-1){
while((!ar.substring(j+k,j+k+1).equals(" ")&&
!ar.substring(j+k,j+k+1).equals(" "))&&
(j+k+1)<ar.length()){
sbb.append(ar.substring(j+k,j+k+1));
k++;
}

for(int m=0;m<l;m++){
if(sbb.toString().equals(haire[m])){
dou=true;
}
}
if(!dou){
haire[l]=sbb.toString();
l++;
}
dou=false;
sbb=new StringBuffer();
i=j+k-1;
}
k=0;
}

}
br.close();
}catch(Exception ex){}

for(int i=0;i<l;i++){
naiyou=naiyou.replace(haire[i],"<a href=\""+haire[i]+"\">"+haire[i]+"</a>");
naiyou+=i+":"+haire[i];//デバッグ用です
}

最後のデバッグ用のコードで配列を全部見るとちゃんと入っていましたが、
replaceメソッドで実装するときにうまくいってないみたいです。

http://w
http://ww
http://www
などとしたときに、全部"http://w"で置換されてしまいます。
他に方法が考えられないのです。
どなたかアドバイス頂けませんか。
ご返答お待ちしてます
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2005-10-18 01:00
引用:

http://w
http://ww
http://www
などとしたときに、全部"http://w"で置換されてしまいます。



この場合にして欲しい処理は最長一致検索でしょうから、検索文字列を長い順でソートしてから順に置換して……とやっても、この場合は置換後の文字列に再度マッチしてしまってうまくいかないと思います。

String.replace() にまかせないで、

  1. 自分のコードで "http://" を探す
  2. 見付かった位置から検索対象文字列を長い順でマッチさせて、マッチしたら置換

を繰り返すのでどうでしょう。

または、もしかして
コード:
naiyou = naiyou.replaceAll("http://[-:@.%/&#=~+_0-9a-zA-Z]+", "<a href='$0'>$0</a>");


あたりで済む処理だったりしませんか?
delix
会議室デビュー日: 2005/10/13
投稿数: 14
投稿日時: 2005-10-18 17:50
スフレさんご返答ありがとうございます。
その一行でうまくいきました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)