В Android Studio, я извлекаю различные пронумерованные результаты Google через JSoup, которые я пытаюсь отсортировать с помощью Collection.sort. Сортировка работает, но так как результаты Google идут с запятой (с азиатским Google) и пробелом (с западным Google), сортировка выполняется не очень хорошо.
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
public class Concept1Activity extends AppCompatActivity {
Button button;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_concept1);
textView = findViewById(R.id.textView);
button = findViewById(R.id.btnParseHTML);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getHtmlFromWeb();
}
});
}
private void getHtmlFromWeb() {
new Thread(new Runnable() {
@Override
public void run() {
final StringBuilder stringBuilder = new StringBuilder();
try {
Document docCornes = Jsoup.connect("https://www.google.fr/search?q=" + "cornes").get();
Document docVerra = Jsoup.connect("https://www.google.fr/search?q=" + "verra").get();
Document docPommes = Jsoup.connect("https://www.google.fr/search?q=" + "pommes").get();
Document docDiable = Jsoup.connect("https://www.google.fr/search?q=" + "diable").get();
Document docEponge = Jsoup.connect("https://www.google.fr/search?q=" + "eponge").get();
Elements nbrIdiom = new Elements();
nbrIdiom.add(docDiable); nbrIdiom.add(docEponge); nbrIdiom.add(docPommes); nbrIdiom.add(docCornes); nbrIdiom.add(docVerra);
Collections.sort(nbrIdiom, new Comparator<Element>() {
@Override
public int compare(Element e1, Element e2) {
return e1.getElementById("result-stats").ownText().compareTo(e2.getElementById("result-stats").ownText());
}
});
for (Element results : nbrIdiom) {
stringBuilder
.append("\n")
.append(results.getElementsByClass("gLFyf gsfi").attr("value"))
.append("\n")
.append(results.getElementById("result-stats").ownText())
.append("\n");
}
} catch (IOException e) {
stringBuilder
.append("Error : ")
.append(e.getMessage())
.append("\n");
}
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(stringBuilder.toString());
}
});
}
}).start();
}
}
Я получаю результат, как показано ниже, и вы могли видеть что он отсортирован, но из-за запятой или пробела он не отсортирован должным образом:
- Около 1 500 000 результатов
- Около 19 700 000 результатов
- Около 3 960 000 результатов
- Около 685 000 результатов
- Около 773 000 результатов
Любая идея будет более чем приветствоваться ^ - ^