2016-06-07 145 views
0

從文本文件中讀取教室名稱(「B106」)並將它們保存在數組列表中。 我需要按字母排序該數組,然後按數字排序。 我讀了一些關於使用Collections/Comparator的東西,但我無法成功實現它們,我該如何做到這一點?Java - 按字母順序和數字順序排列數組列表

例: 輸入: 「B106」, 「D111」, 「A201」, 「B102」

輸出: 「A201」, 「B102」, 「B106」, 「D111」

類Core_Salas,我管理我的文件

public class Core_Sala { 

//--------------------------------------------------------------------------- 
public static ArrayList<Sala> Sala = new ArrayList<Sala>(); 
private static File SF = new File("Salas.txt"); 
public static void LerSalas() 
{ 

    try 
    { 
     if(SF.exists()==true) 
     { 
      String[]parts; 
      Sala.clear();//Array list limpar 
      Scanner inputFile = new Scanner(SF); 
      while (inputFile.hasNextLine()) { 
       String line = inputFile.nextLine(); 
       Sala s1 = new Sala(line); 
       Sala.add(s1); 
      } 
      inputFile.close(); 
     } 
    } catch (FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
    if(SF.exists()==false) 
    { 
     PrintWriter out = null; 
     try 
     { 
      out = new PrintWriter(SF); 

     }catch (FileNotFoundException e) { 
      JOptionPane.showMessageDialog(null, "O ficheiro de utilizadores estava danificado ou era inexistente, foi criado um novo com o utilizador admin!"); 
     } 
     out.close(); 
    } 
} 
} 

類薩拉吸氣劑setter和構造

public class Sala { 
private String Salas; 

public Sala(String salas) 
{ 
    this.Salas=salas; 
} 
public String getSalas() { 
    return Salas; 
} 
public void setSalas(String salas) { 
    Salas = salas; 
} 

@Override 
public String toString() 
{ 
    return Salas; 
} 
} 
+0

如果所有字符串遵循相同的模式,您可以按字母順序排序。不需要解析字符串。 – Thilo

+0

只能按字母順序排序,還能正確使用數字嗎? 另外我會嘗試Seek Addo鏈接看起來很簡單,雖然我不知道我是否被允許使用該代碼,因爲這是一個針對學校的項目,而tracher從來沒有提到它。 。 。我會嘗試我的運氣謝謝 –

+1

如果數字長度相同(或填充),它將起作用。所以'A123'可以使用'A099',但不能使用'A77'。 – Thilo

回答

0

你可以試試這個

public static void main(String[] args) { 
    LerSalas(); 
    Collections.sort(salaData, new Comparator<Sala>() { 
     @Override 
     public int compare(Sala o1, Sala o2) { 
      return o1.getSalas().compareTo(o2.getSalas()); 
     } 
    }); 
    salaData.stream().forEach(System.out::println); 
} 

讓我知道它是否適合你

+0

是的!這工作感謝一堆=) –

+0

@JoaoMagalhães你歡迎 –

1

Collections.sort()方法可以幫助你。

例子:

public class TestSort { 
    public static void main(String args[]) { 
    String init[] = {"B106", "D111", "A201", "B102"}; 
    List list = new ArrayList(Arrays.asList(init)); 
    System.out.println("Input: " + list); 
    Collections.sort(list); 
    System.out.println("Output: " + list); 
    } 
} 
0

我的意見,如果你的薩拉班只有一個屬性是字符串類型,那麼你沒必要讓薩拉Class.You可以添加字符串直接arrayList.and使用集合的.sort(),則按照alphabatically和numerically.For如:

public class Test { 

    public static void main(String args[]){ 
     List al = new ArrayList(); 
     al.add("B106");al.add("A201");al.add("D111");al.add("BC102"); 
     Collections.sort(al); 
     System.out.println(al); 
    } 
} 

,但如果你必須使用撒拉族類,那麼你就可以實現比較或類似的界面。

+0

這是一個學校的項目,我被迫創建一個類,我將不得不用管理程序,我沒有選擇= /,但謝謝你的答覆 –