Не могу отсортировать номера Google с помощью JSoup - PullRequest
0 голосов
/ 07 апреля 2020

В 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 результатов

Любая идея будет более чем приветствоваться ^ - ^

...