【问题标题】:Sorting strings by the numbers of characters [duplicate]按字符数对字符串进行排序[重复]
【发布时间】:2013-11-21 09:42:40
【问题描述】:

我有问题。 我想按字符串中的字符数对 txt 文件中的字符串进行排序 例如 输入: 啊啊啊 一个 啊 输出: 一个 啊 啊啊啊 我创建了包含按字母表排列的字符串的集合并创建了包含多个字符串字符的集合,但我无法理解

如何按字符串中的字符数排序

public class SortingFile {
public static void main(String[] args) throws IOException {

try{
    File inputFile=new File("c:/a.txt");
    Reader r=new FileReader(inputFile);
    BufferedReader br=new BufferedReader(r);

    List <String> list = new LinkedList<String>();
    List <Integer> listLength= new LinkedList<Integer>();

    String line=br.readLine();
    list.add(line);

    while (line!=null){
        line=br.readLine(); 
        list.add(line);
        }

    int arrsize=(list.size())-1;
    System.out.println("line array size= "+arrsize);
    list.remove(arrsize); //delete last element (he is null )

    System.out.println("Before sorting by alphabet: "+list);
    Collections.sort(list);//sorting by alphabet
    System.out.println("After sorting by alphabet: " +list);

    for (int i=0;i!=list.size();i++){ //add string lenght to collection
        String a=list.get(i);
        int aa=a.length();
        listLength.add(aa);
    }
    System.out.println("lineLength:"+listLength);
    Collections.sort(listLength); // sotring by asc
    System.out.println("lineLength2:"+listLength);
    br.close();

}catch (FileNotFoundException e1){
System.out.println("File ''a.txt'' Not Found :(");
e1.printStackTrace();
}


 } 
}

【问题讨论】:

    标签: java string sorting numbers character


    【解决方案1】:

    试试看,关注Comparator

     Collections.sort(list, new Comparator<String>() {
    
            @Override
            public int compare(String o1, String o2) {
                return o1.length()-o2.length();
            }
        });
    

    【讨论】:

      【解决方案2】:

      使用Collections.sort(java.util.List, java.util.Comparator),它需要一个额外的Comparator 参数。

      这使您可以更改事物的排序方式。

      【讨论】:

        【解决方案3】:

        Collections.sort 有一个重载方法,您可以在其中提供comparator。编写一个比较器,您将在其中比较字符串的长度并返回更大或更小的值(取决于您想要升序还是降序)。然后只需调用您的Collections.sort(myListOfString,myComporator);,结果将是按长度排序的字符串列表。

        【讨论】:

          【解决方案4】:

          将比较器传递给您的 Collection.sort(list,yourSorter) 方法并使用您想要在其中使用的任何逻辑。

          Collections.sort(list, sortAccordingToLength);
          
           static Comparator<String> sortAccordingToLength= new Comparator<String> {
            public int compare(String a, String b) {
                return a.length()-b.length();
            }
          });
          

          【讨论】:

          • a.length() &gt; b.length(); 返回一个布尔值,而不是一个整数。您的代码无法编译。同样 a 和 b 是字符串,而不是 int。
          • 现在检查,您可以再次删除您的反对票。
          • 这不是我的反对意见,但您的代码再次无法编译。
          • @ShoaibChikate,您应该维护比较器合同。那应该返回 -(value)、0 和 +(value)。您的比较将始终返回 +(value)。
          • 同意老哥。急着急。现在你可以检查了。我自己写了逻辑。只是给他粗略的想法,但现在根据他的要求修改答案
          猜你喜欢
          • 1970-01-01
          • 2018-08-11
          • 2021-03-16
          • 2015-03-16
          • 2013-04-15
          • 2017-07-25
          • 2021-11-24
          • 1970-01-01
          • 2021-07-13
          相关资源
          最近更新 更多