Apacheソースアーカイブの名前(文字列)をソートする方法。 私はJsoupで以下のコードを試しましたが、与えられた期待どおりの結果を返していません。 この問題を解決するには?Javaの場合、文字列をソートするには、内部に数字が含まれていれば?
public static void getApacheArchives() throws IOException{
String url = "https://archive.apache.org/dist/httpd/"; // or whatever goes here
Document document = Jsoup.connect(url).followRedirects(false).timeout(60000/*wait up to 60 sec for response*/).get();
Elements anchors = document.body().getAllElements().select("a");
Collections.sort(anchors, new Comparator<Element>() {
@Override
public int compare(Element e1, Element e2) {
return e1.text().compareTo(e2.text());
}
});
for (int i = 0; i < anchors.size(); i++) {
Element a = anchors.get(i);
if (
(a.text().matches("(apache_)[1].[0-9].[0-9]{1,2}.(tar.gz)"))
||
(a.text().matches("(httpd-)[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}.(tar.gz)"))
){
System.out.println(a.text());
}
}
}
結果、以下のこのコードリターン:
...
のhttpd-2.3.6.tar.gz
のhttpd-2.3.8.tar.gz
のhttpd-2.4.1.tar。 GZ
のhttpd-2.4.10.tar.gz
のhttpd-2.4.12.tar.gz
のhttpd-2.4.16.tar.gz
のhttpd-2.4.17.tar.gz
のhttpd-2.4 .18.tar.gz
のhttpd-2.4.2.tar.gz
のhttpd-2.4.20.tar.gz
のhttpd-2.4.3.tar.gz
のhttpd-2.4.4.tar.gz
のhttpd-2.4.6 .tar.gzの
のhttpd-2.4.7.tar.gz
のhttpd-2.4.9.tar.gz
...
しかし、期待される結果は以下の通りです:
...
httpd-2.3.6.tar.gz
httpd-2.3.8.tar.gz
のhttpd-2.4.1.tar.gz
のhttpd-2.4.2.tar.gz
のhttpd-2.4.3.tar.gz
のhttpd-2.4.4.tar.gz
のhttpd-2.4。 6.tar.gz
のhttpd-2.4.7.tar.gz
のhttpd-2.4.9.tar.gz
のhttpd-2.4.10.tar.gz
のhttpd-2.4.12.tar.gz
httpd-2.4.16.tar.gz
httpd-2.4.17.tar.gz
httpd-2.4.18.tar.gz
httpd-2.4.20.tar.gz
...
質問は何ですか?出力はまさに予想どおりで、 ".10"は ".2"の前にソートされています。これは、その順序が文字列であるためです。コード内の何もそれに対処しようとしません。文字列をパーツに(おそらく正規表現で)解析するコードを記述し、文字列部分を文字列として比較し、個々の数字部分を数字として比較する必要があります。だからそれをしようとすると、あなたが問題に遭遇した場合は、それをしようとするあなたのコードに関する特定の質問をしてください。 –
あなたはアンカーの数字を抽出してコンパレータと比較する必要があります。ここでは混合物のテキストを比較しています –