• ベストアンサー

文字列の指定した範囲を抽出する方法

こんにちは ver_51 と言います、今文字列の抽出法で悩んでいます。 基本的なことでお恥ずかしいのですが、Javaではいい方法が全く思いつかなかったので、質問をさせていただきました。 例えば String a = "<a href="http://www.yahoo.co.jp/">Yahoo! JAPAN</a>"; String b = ""; のような文字列があるとすると、文字列 a から http://www.yahoo.co.jp/ だけを取り出したい場合 int i; for(i=10;i<=32;i++){ b += a.charAt(i); } で b の中身は http://www.yahoo.co.jp/ となりますが、どうも原始的でかっこ悪いです。 仮に http://www.yahoo.co.jp/.* のようにURLに続きがある場合、数字(ここでいう32)をいちいち変える必要があり、応用もききません。 文字列 a から指定した範囲だけを抽出する良い方法はないでしょうか? ご質問は遠慮なくして下さい。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

import java.util.regex.*; class QuartString { public static void main(String args[]) { String a = "<a href=\"http://www.yahoo.co.jp/\">Yahoo! JAPAN</a>"; String b = ""; Pattern quartString = Pattern.compile("\"[^\"]+\"");//”で囲まれている部分 Matcher m = quartString.matcher(a); System.out.println(a); if(m.find()){ b=a.substring(m.start()+1,m.end()-1);//”の内側 System.out.println(b); } } }

ver_51
質問者

お礼

回答ありがとうございます。Pattern.compile を使って範囲を指定(型決め!?)するのですね、それから抽出すると。自分で調べた時は a.charAt(); しか見つけられず、困っていました。記号(\"や[])の使い方がいまだに分かりませんが、そこは自分で調べたり色々と試したりしながら学びたいと思います。本当にありがとうございました。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2さんの言われることはまことごもっとも Pattern quartString = Pattern.compile("href=\"[^\"]+\"",Pattern.CASE_INSENSITIVE); とかするとちょっとだけましかも。

回答No.2

#1さんの方法で質問の例題はできますけど、 href属性の前に、例えばtarget属性なんかがきちゃうとそっちを取得しちゃうし、 それに属性値って""で括らなくても大丈夫だったような… あと <a name="hoge">~</a> の場合もあるし… htmlってけっこうあいまいだから、本当に一般的にやろうと思ったらけっこう難しいですよ。

ver_51
質問者

お礼

target 属性など内容がいまいち分からないのですが、質問に回答していただきありがとうございます。例題のような単純なプログラムを作っていますので、#1さんの回答で大満足しております。またご縁がございましたら宜しくお願いします。

関連するQ&A