2016-06-07 138 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

这是一个学校的项目,我被迫创建一个类,我将不得不用管理程序,我没有选择= /,但谢谢你的答复 –