以下のような文字列にURLがあります
http://www.example.com/abc?page=6
http://www.example.com/abc?page=66
http://www.example.com/abc?page=666
Javaで文字列関数を使用してページ番号のみ、つまり「=」の後の文字のみを抽出したいのですが、これを行う方法がわかりません。助けてください
ありがとうございました
特定の文字の後に何かを取得するだけの単純なケースの場合、正規表現は実際には必要ありません。
例
String test = "http://www.example.com/abc?page=6";
String number = test.substring(test.lastIndexOf("=") + 1);
System.out.println(number);
出力
6
ノート
yourに文字String
が含まれていない場合=
、結果は全体になりString
ます。
これは、メソッドlastIndexOf
が を返すために発生します。この例で- 1
は、これが合計されているため、 が返されます。+1
0
要するに、元の の全長でString
始まり、全長に及ぶ部分文字列を返します。0
String
あなたが使用することができますString.substring method
String result = input.substring(input.indexOf("=")+1);
追加情報
ここのJavaドキュメントに従って
public String substring(int beginIndex)
この文字列の部分文字列である新しい文字列を返します。部分文字列は、指定されたインデックスの文字で始まり、この文字列の末尾まで拡張されます。
URL(「ページ」だけでなく)内の特定のパラメーターの整数値を抽出するために使用できるソリューションは次のとおりです。
public static int extractIntFromURL(String url,String par) throws ParameterNotFoundInURLException{
int number=0;
Pattern p = Pattern.compile("[?&]"+par+"=([0-9]+)");
Matcher m = p.matcher(url);
m.find();
try {
number = Integer.parseInt(m.group(1));
} catch (java.lang.IllegalStateException e){
throw new ParameterNotFoundInURLException(url);
}
return number;
}
URL に "page=" が含まれていない場合、例外がスローされます。ゼロが有効なページ番号である可能性があるため、ゼロを返すのは正しくありません。
次のように使用できます。
public static void main(String[] args) throws ParameterNotFoundInURLException {
String url="http://www.example.com/abc?page=66&other=yes&filter=none";
int pageNum = TheClass.extractIntFromURL(url,"page");
}
URL の形式が固定されている場合
String url = "http://www.example.com/abc?page=666";
String page = url.substring(url.lastIndexOf('=')+1);
System.out.println(page); // prints 666
後で他のリクエストパラメータが存在する可能性がある場合
String url = "http://www.example.com/book?id=101&page=60&bookmarks=on";
String page = url.split("\\?")[1].replaceAll(".*page=([^&]+).*", "$1");
System.out.println(page); // prints 60