【问题标题】:How to sort alphabet and number如何对字母和数字进行排序
【发布时间】:2019-05-02 07:10:52
【问题描述】:

在我的编码中,我得到了基于名称的排序输出。但是,如果我输入相同的名称,则数组保持不变。有什么办法,当名称相同时,数字将被排序?提前致谢。


 public class InsertionSort {

           /*Function to sort array using insertion sort*/
            void sort(String str[]) 
            { 
                int n = str.length; 
                for (int i=1; i<n; ++i) 
                { 
                    String key = str[i]; 
                    int j = i-1; 

                    /* Move elements of arr[0..i-1], that are 
                       greater than key, to one position ahead 
                       of their current position */
                    while (j >= 0 && key.compareTo(str[j]) < 0)  
                    { 
                        str[j+1] = str[j]; 
                        j = j-1; 
                    } 
                    str[j+1] = key; 
                } 
            } 

            /* A utility function to print array of size n*/
            static void printArray(String str[]) 
            { 
                int n = str.length; 
                for (int i=0; i<n; ++i) 
                    System.out.print(str[i] + " "); 

                System.out.println(); 
            } 

            // Driver method 
            public static void main(String args[]) 
            {         
                 String[]  str ={"asif44","asif435"}; //2 elements



                printArray(str); 
            } 
        } 

【问题讨论】:

  • 你有一个字符串数组,到目前为止一切顺利。什么不起作用?你指的是哪个“数字”?您是指字符串中包含的数字吗?如果是这样,您显然必须拆分值,然后进行 2 步比较,否则它只是发生在字符串上的字典排序
  • 我的意思是名字后面的数字..比如asif44
  • 是的,我看到了。你必须先将字符串拆分为part1和part2,然后才能进行比较,首先比较part1作为字符串比较,然后比较part2作为数字比较。
  • 这里是按字数边界分割字符串的正则表达式:String regex = "(?&lt;=\\D)(?=\\d)|(?&lt;=\\d)(?=\\D)"; - 其余的由你决定,非常简单

标签: java


【解决方案1】:

还有一种更精确的方法可以做到这一点,在集合框架数据类型中添加字符串元素并使用 collections.sort() 方法。

【讨论】:

    【解决方案2】:

    您没有在代码中调用 sort() 方法。此外,您需要将 sort() 方法设为静态才能从 main() 方法调用。

      // Driver method 
                public static void main(String args[]) 
                {         
                     String[]  str ={"asif44","asif435"}; //2 elements
    
                     **sort(str);**
    
                    printArray(str); 
                } 
    

    【讨论】:

    • 这不是答案......他必须将字符串分成两部分,以便通过字符串比较对第一部分进行排序,按数字比较对第二部分进行排序
    • @AKSW 请你拿下代码,执行并确认。
    • @AKSW 你确定吗?我认为字符串比较考虑到了这一点。 Arrays.sort 也这样做
    • 我不必确认我所知道的。字符串按字典顺序排序,它不会根据字符串中包含的数字部分将其排序为正确的顺序
    • @StephanHogenboom 我敢肯定,是的。词汇顺序与数字顺序不同,不是吗? “4”对“15”呢?什么是字符串,如果你比较纯数字呢?
    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2011-02-06
    • 2015-10-14
    • 2013-08-02
    相关资源
    最近更新 更多