Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据字符串中的数字对字符串[]数组进行排序_Java_Arrays - Fatal编程技术网

Java 根据字符串中的数字对字符串[]数组进行排序

Java 根据字符串中的数字对字符串[]数组进行排序,java,arrays,Java,Arrays,我有一个数组,看起来像: array[] = {1c, 13d, 11d, 10d, 1h, 13h, 5s, 2s, 12d} 我想根据数组中的数字对数组进行排序,以便最终结果为: {1c, 1h, 2s, 5s, 10d, 11d, 12d, 13d, 13h} 有没有办法做到这一点?想想你是如何只用纸和铅笔(没有电脑)做到这一点的。你很可能会: 遍历数组的每个元素,并将其转换为一个整数(即删除非数字字符) 对结果仅整数数组或列表进行排序。提示:Collections.sort()是您

我有一个数组,看起来像:

array[] = {1c, 13d, 11d, 10d, 1h, 13h, 5s, 2s, 12d}
我想根据数组中的数字对数组进行排序,以便最终结果为:

{1c, 1h, 2s, 5s, 10d, 11d, 12d, 13d, 13h}

有没有办法做到这一点?

想想你是如何只用纸和铅笔(没有电脑)做到这一点的。你很可能会:

  • 遍历数组的每个元素,并将其转换为一个整数(即删除非数字字符)
  • 对结果仅整数数组或列表进行排序。提示:
    Collections.sort()
    是您的朋友:)

    • 最好的方法是实现接口。当您决定如何比较字符串时,可以在类中使用实用程序方法。下面是一个完整的工作示例

      import java.util.Arrays;
      import java.util.Comparator;
      
      
      public class Foo {
      
          public static void main(String[] args) {
      
              String[] myArray = {"1c", "13d", "11d", "10d", "1h", "13h", "5s", "2s", "12d"};
      
              System.out.println(Arrays.toString(myArray));
      
              Arrays.sort(myArray, new Comparator<String>() {
                  @Override
                  public int compare(String one, String two) {
      
                      int oneNum = Integer.parseInt(one.substring(0, one.length() - 1));
                      int twoNum = Integer.parseInt(two.substring(0, two.length() - 1));
      
                      char oneChar = one.charAt(one.length() - 1);
                      char twoChar = two.charAt(two.length() - 1);
      
                      if (oneNum < twoNum) {
                          return -1;
                      } else if (oneNum == twoNum) {
                          if (oneChar < twoChar) {
                              return -1;
                          } else if (oneChar == twoChar){
                              return 0;
                          } else {
                              return 1;
                          }
                      } else {
                          return 1;
                      }
                  }
              }
          );
      
          System.out.println(Arrays.toString(myArray));   
      
          }
      
      }
      
      导入java.util.array;
      导入java.util.Comparator;
      公开课Foo{
      公共静态void main(字符串[]args){
      字符串[]myArray={“1c”、“13d”、“11d”、“10d”、“1h”、“13h”、“5s”、“2s”、“12d”};
      System.out.println(Arrays.toString(myArray));
      sort(myArray,newcomparator(){
      @凌驾
      公共整数比较(字符串1、字符串2){
      intonenum=Integer.parseInt(一个.substring(0,一个.length()-1));
      inttwonum=Integer.parseInt(两个.substring(0,两个.length()-1));
      char oneChar=one.charAt(one.length()-1);
      char twoChar=two.charAt(two.length()-1);
      if(oneNum
      肯定有办法;到目前为止,您尝试了什么?我还没有想出正确的逻辑。实现您自己的压缩程序,并像往常一样对其进行排序。非常感谢。我已经想出了一个解决方案,但这段代码要好得多。:-)我假设字符串的格式是一个整数,后跟一个字符。如果不是这样,您可以使用类似.split(\\D+)的正则表达式来正确拆分它。是的,就是这样。