Сортировка из файла Android - PullRequest
       0

Сортировка из файла Android

0 голосов
/ 31 октября 2011

Я хочу получить текст из файла и показать его в отсортированном виде.

У меня есть класс под названием RankActivity, где я с методом zapisi () записываю одну строку и одно целое число poenibrojanje в файл с именем 3.txt.

public void zapisi() {
    // WRITING
    String eol = System.getProperty("line.separator");
    String a = txtIme.getText().toString();
    try {
        FileOutputStream fOut = openFileOutput("3.txt", MODE_APPEND);

        OutputStreamWriter osw = new OutputStreamWriter(fOut);

        osw.write("Ime: " + a + "  Poeni: " + a1.poenibrojanje + eol);

        // Log.d("Writing", "This is writing log: " + a +
        // +a1.poenibrojanje);

        // osw.flush();
        osw.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Также у меня есть класс, где я читаю материал из файла и показываю его в TextView. Этот класс называется RankPrikazActivity, и вот полный код.

пакет com.test.brzoracunanje;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class RankPrikazActivity extends Activity implements OnClickListener {
TextView tvRank, tvRankPrikaz;
Button btnPovratak;



protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.rankprikaz);

    tvRank = (TextView)findViewById(R.id.tvRank);
    tvRankPrikaz = (TextView)findViewById(R.id.tvRankPrikaz);
    btnPovratak = (Button)findViewById(R.id.btnPovratak);
    btnPovratak.setOnClickListener(this);
    citaj();

}


@Override
public void onClick(View v) {

    Intent intent = new Intent(this,PocetnaActivity.class);
    startActivity(intent);


}

public void citaj() {
    // READING
    String eol = System.getProperty("line.separator");
    try {
        BufferedReader input = new BufferedReader(new InputStreamReader(
                openFileInput("3.txt")));
        String line;
        StringBuffer buffer = new StringBuffer();
        while ((line = input.readLine()) != null) {
            buffer.append(line + eol);
        }
        //Log.d("Reading log", "This is reading log:" + buffer);
        //System.out.println(buffer);
        tvRankPrikaz.setText(buffer.toString());

    } catch (Exception e) {
        e.printStackTrace();
    }

}

}

С помощью метода, вызываемого методом citaj () в этом классе, я читаю его из файла и показываю в TextView со следующей строкой:

   tvRankPrikaz.setText(buffer.toString());

Теперь я хочу показать его в этом текстовом поле, отсортированном по целому числу poenibrojanje из класса RankActivity.

Как это сделать?

Ответы [ 4 ]

2 голосов
/ 31 октября 2011

Просто поместите эти строки в часть чтения вместо вашего кода:

StringBuffer buffer = new StringBuffer();
LinkedList<String> strings = new LinkedList<String>();
while ((line = input.readLine()) != null) {
    strings.add(line);
}
Collection.sort(strings);

String text = "";
for(String string : strings) {
    text += string + eol;
}
tvRankPrikaz.setText(text);
1 голос
/ 31 октября 2011

Здесь я написал вам простой пример сортировки по номерам.

Все, что вам нужно сделать, - это проанализировать целое число из строки, которую вы извлекаете из файла, и поместить ее в качестве ключа для карты и строки (ссылка) для значения этого ключа ...

Это пример, который я только что написал.Вы должны настроить его под свои нужды.

 Map<Double, String> map = new HashMap<Double, String>();
        map.put(new Double(22.02), "TEST 1");
        map.put(new Double(12.3), "TEST 2");
        map.put(new Double(1.3), "Test 3");
        Set<Double> nums = map.keySet();
       Collection<String> strings = map.values();
        Object[] Arr  = nums.toArray();
        List list= Arrays.asList(Arr);
        Collections.sort(list);
        for(Object o: list)
            map.put((Double) o, map.get(o));


        for(Double d: map.keySet())
            Log.i("TEST", map.get(d));
1 голос
/ 31 октября 2011

Попробуйте вместо этого:

public void citaj() {
    // READING
    try {
        BufferedReader input = new BufferedReader(new InputStreamReader(
                openFileInput("3.txt")));
        String line;
        TreeMap<Integer,String> sorted_map = new TreeMap<Integer,String>(new Comparator(){
          public int compare(Object o1, Object o2){
            Integer i1 = (Integer)o1;
            Integer i2 = (Integer)o2;
            return -(i1.compareTo(i2));
          }
          public boolean equals(Object o1){
            return this == o1;
          }
        });
        while ((line = input.readLine()) != null) {
          Pattern intsOnly = Pattern.compile("\\d+");
          Matcher makeMatch = intsOnly.matcher(line);
          makeMatch.find();
          Integer inputInt = Integer.valueOf(makeMatch.group());
          sorted_map.put(inputInt, line);
        }
        //Log.d("Reading log", "This is reading log:" + buffer);
        //System.out.println(buffer);
        String toOutput = "";
        for(Integer i: sorted_map.keySet()){
          toOutput += sorted_map.get(i) + "\n";
        }
        tvRankPrikaz.setText(toOutput);

    } catch (Exception e) {
        e.printStackTrace();
    }

}
0 голосов
/ 31 октября 2011

Самое простое, что можно сделать, это использовать базу данных . Затем, когда вы выполняете запрос на выборку, вы можете просто отсортировать результаты, используя предложение ORDER BY .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...