【问题标题】:How to sort strings by length如何按长度对字符串进行排序
【发布时间】:2019-05-22 21:26:39
【问题描述】:

我遇到了从数组中排序字符串的问题。我能够对整数进行排序,但我真的不知道如何将字符串从最短到最长排序。

我尝试使用 Strings.length 将字符串转换为整数,但我不知道如何将它们转换回原来的字符串。

字符串处理程序;

        System.out.println("\nNow we will sort String arrays.");
        System.out.println("\nHow many words would you like to be sorted.");
        Input = in.nextInt();
        int Inputa = Input;
        String[] Strings = new String [Input];
        for (int a = 1; a <= Input; Input --) //will run however many times the user inputed it will
    {
        counter ++; //counter counts up
        System.out.println("Number " + counter + ": "); //display 
        userinputString = in.next();
        Strings[countera] = userinputString;  //adds input to array
        countera ++;
    }
        System.out.println("\nThe words you inputed are :");
        System.out.println(Arrays.toString(Strings));

        System.out.println("\nFrom shortest to longest the words are:");
        counter = 0;
        int[] String = new int [Strings.length];
    for (int i = 0; i < Strings.length; i++) //will run however many times the user inputed it will
    { 
       int a = Strings[i].length();
       String[i] = a;
    }

    System.out.println(Arrays.toString(String));

我希望能够对实际的字符串进行排序,但是我得到了数字并且无法找到如何在排序后将这些数字转回它们的字符串。

【问题讨论】:

  • “从最短到最长”与“按字母顺序”不同。你可以使用库函数吗?
  • 要从最短到最长排序(反之亦然),您需要实现一个比较器,它将定义一个字符串何时“大于”另一个
  • 将第二个参数传递给Arrays.sort,它将是Comparator&lt;String&gt; 的匿名实现类实例。在其compare 方法中,返回new Integer(str1.length()).compareTo(str2.length())

标签: java arrays string sorting


【解决方案1】:

如果允许您使用库函数,那么您可能需要执行以下操作:

Arrays.sort(Strings, Comparator.comparing(String::length));

这适用于 Java 8 及更高版本。只需确保在文件中的某个位置导入 import java.util.*;

【讨论】:

  • 这个语法从 Java 8 开始有效。我真的不知道它。酷!
  • 顺便说一下,这个语法很像 Python 的排序函数的key 参数,它获取一个函数指针来调用排序对象,它应该返回一个可比较的值
  • @SomethingSomething 好吧,Comparator.comparing() 甚至称它的参数为keyExtractor
【解决方案2】:

无法转换它们,因为您只存储长度 - 可能有许多不同的字符串具有相同的长度。 取而代之的是,您可以尝试实现自己的比较器并将其传递给 java 的排序方法:给定两个字符串如果第一个较长则返回 1,如果相等则返回 0,如果较短则返回 -1。您也可以在传递给 Arrays.sort() 的 lambda 比较器中执行此操作。

(s1, s2) -> {
      if (s1.length() < s2.length()) {
           return -1;
      }
      return s1.length() > s2.length();
}

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 2011-03-11
    • 2016-04-23
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多