2013-08-04 3 views
-2

Мне нужно прочитать данные из файла, который содержит строки и целые числа и разделен разделителями «#», и мне нужно отсортировать строки по последнему целому числу в файле и распечатать их?Прочитайте данные из файла и отсортируйте их по целым числам?

`public void displayTeams()throws IOException` 
    `Scanner s = null;` 
    `try { 

з = новый сканер (новый BufferedReader (новый FileReader ("team.txt"))), `

 while (s.hasNext()) { 
      System.out.println(s.next()); 
     } 
    } 
    finally { 
     if (s != null) { 
      s.close(); 
     } 
    } 
    }` 

Затем файл выглядит следующим образом: Liv # 0 # 0 # 0 # 0 # 5 #

manb # 0 # 0 # 0 # 0 # 7 #

Che # 0 # 0 # 0 # 0 # 1 #

АРС е # 0 # 0 # 0 # 0 # 2 #

лол # 0 # 0 # 0 # 0 # 9 #

папа # 0 # 0 # 0 # 0 # 0 #

+0

* "отсортировать строки по последнему целому числу в файле" * Что вы имеете в виду? – arshajii

+0

Каждая строка файла сортируется как привет # 1 # 3 # 4 # 2 # 5 #. Мне нужно отсортировать его по последнему целому числу, т. Е. 5 в этом случае @arshajii – Royboss

+0

Что вы пробовали? У вас есть идея, как это сделать? Также, пожалуйста, предоставьте несколько образцов содержимого файла. – pajaja

ответ

1

Воспользоваться сортировка коллекция как TreeMap здесь.

// Sorted by key (last integer); value = complete line of text 
Map<Integer, String> map = new TreeMap<Integer, String>(); 

String data = "hello#1#3#4#2#5#\n" + 
       "world#1#3#4#2#\n" + 
       "how is everybody?#1#3#4#"; // num of # can vary 

// you'd read from a file instead 
Scanner scanner = new Scanner(data).useDelimiter("#"); 

// process line by line 
while (scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 

    // split every line & 
    String[] split = line.split("#"); 
    // convert last int string to Int 
    Integer last = Integer.valueOf(split[split.length - 1]); 

    // save in the map 
    map.put(last, line); 
} 

// iterate in sorted order 
for (Map.Entry<Integer, String> entry : map.entrySet()) { 
    System.out.println(entry.getValue()); 
} 

Выход:

world#1#3#4#2# 
how is everybody?#1#3#4# 
hello#1#3#4#2#5# 
0

попробовать

ArrayList<String> stringList = new ArrayList<String>(); 
    ArrayList<Integer> intList = new ArrayList<Integer>(); 
    Scanner s = null; 
    try { 
     s = new Scanner(new BufferedReader(new FileReader("team.txt"))); 
    while (s.hasNext()) { 
     String tempStr = s.next(); 
     stringList.add(tempStr); 
      int lastIndexOf = tempStr.lastIndexOf("#"); 
      String intStr = tempStr.substring(lastIndexOf-1, lastIndexOf); 
      Integer parsedInt = Integer.parseInt(intStr); 
      intList.add(parsedInt); 
    } 
    String lines[] = stringList.toArray(new String[stringList.size()]); 
    Integer numbers[] = intList.toArray(new Integer[intList.size()]); 
    boolean swapped = true; 
    int j = 0; 
    int tmp; 
    String tmpS; 
    while (swapped) { 
    swapped = false; 
    j++; 
    for (int i = 0; i < numbers.length - j; i++) { 
     if (numbers[i] > numbers[i + 1]) { 
      tmp = numbers[i]; 
      tmpS = lines[i]; 
      numbers[i] = numbers[i + 1]; 
      lines[i] = lines[i + 1]; 
      numbers[i + 1] = tmp; 
      lines[i + 1] = tmpS; 
      swapped = true; 
     } 
    } 
} 

} 

finally { 

    if (s != null) { 
     s.close(); 
    } 
} 
+0

Этот код не печатает строку @Anuswadh – Royboss

+0

@Royboss Линии массива [] содержат отсортированные строки, которые вы можете распечатать, где угодно. – Anuswadh

Смежные вопросы