有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用字符串中的a数字对字符串数组进行升序?

我有一个数字,例如593,我需要对这些数字进行排序,并按升序排列。我想知道的是如何按升序排列。这是excel中的几行,我必须订购。注意,这里有所有10000行

8/26/2012,Kristina,H,Chung,947 Martin Ave.,Muncie,CA,46489,khchung@business.com, $593 
11/16/2012,Paige,H,Chen,15 MainWay Rd.,Dallas,HI,47281,phchen@business.com, $516 
11/10/2012,Sherri,E,Melton,808 Washington Way,Brazil,CA,47880,semelton@business.com, $80 
9/20/2012,Gretchen,I,Hill,56 Washington Dr.,Atlanta,FL,47215,gihill@business.com, $989 
3/11/2012,Karen,U,Puckett,652 Maplewood Ct.,Brazil,FL,46627,kupuckett@business.com, $826 
7/4/2012,Patrick,O,Song,679 MainWay Rd.,Lafayette,GA,47161,posong@business.com, $652 

在它被分类之后,它看起来是这样的

2012年10月11日,加利福尼亚州巴西华盛顿路808号梅尔顿东区雪莉,邮编:47880,semelton@business.com, $80 2012年11月16日,佩奇,H,陈,达拉斯大道15号,邮编:47281,phchen@business.com, $516 2012年8月26日,加利福尼亚州曼西市马丁大道947号Chung H Kristina,邮编:46489,khchung@business.com, $593 2012年4月7日,乔治亚州拉斐特大道679号帕特里克,O,宋,47161,posong@business.com, $652 2012年11月3日,坎特伯雷州卡伦,普克特,马萨诸塞州枫木镇652号。,巴西,佛罗里达州,46627,kupuckett@business.com, $826 2012年9月20日,佛罗里达州亚特兰大市华盛顿博士56号希尔市格雷琴,邮编:47215,gihill@business.com,989元

但我需要知道如何编写代码来实现这一点

某些代码行: 持绳器2; ArrayList人员=新ArrayList<&燃气轮机;();

    for(int i = 0; i < listOfCustomers.length; i++)
    {
        holder2 = listOfCustomers[i];
        persons.setData(holder2);   
    }


    Collections.sort(persons);

}

共 (3) 个答案

  1. # 1 楼答案

    以下是我将如何进行:

    1. 将这些行存储在Srting数组或ArrayList中
    2. 对于每一行,找到$by String的chatAt()方法的位置,并从字符串中提取数字
    3. 将这些字符串存储在地图中,键指定行号,值为#2中提取的数字
    4. 根据给定的值对映射进行排序here
    5. 现在你有了一个根据值排序的地图,键代表了线的排序顺序
  2. # 2 楼答案

    String[] lines; //Assume initialized
    
    for (int i = 0; i < lines.length; i++) {
        String string = lines[i];
        int number = Integer.valueOf(string.substring(string.lastIndexOf('$') + 1));
        lines[i] = (char)number + string;
    }
    
    Arrays.sort(lines);
    
    for (int i = 0; i < lines.length; i++) {
        String string = lines[i];
        lines[i] = string.substring(1);
    }
    
    for (String s : lines) {
        System.out.println(s);
    }
    

    这在我的电脑上以51毫秒的速度对10710行进行了排序。但是,请注意,只有当$xxx小于Integer.MAX_VALUE时,它才会起作用

  3. # 3 楼答案

    创建arrayList:

    ArrayList<Person> persons = new ArrayList<>();
    

    创建一个只有一个简单字段(示例中称为data)的类Person。为文件中的每一行创建Person对象并调用setData。将它们添加到列表中。使用集合。添加所有对象后,在ArrayList上执行sort()。循环遍历ArrayList,并对列表中的每个项目调用getData

    public class Person implements Comparable<Person>{
    
        private String data;
    
        /**
         * @return the data
         */
        public String getData() {
            return data;
        }
    
        /**
         * @param data the data to set
         */
        public void setData(String data) {
            this.data = data;
        }
    
        @Override
        public int compareTo(Person o) {
            if (getValue(this) < getValue(o)) {
                return -1;
            } else if (getValue(this) > getValue(o)) {
                return 1;
            }
            return 0;
        }
    
        private int getValue(Person p) {
            String[] elements = p.getData().split(",");
            String value = elements[elements.length - 1].trim();
            if (value.startsWith("$")) {
                value = value.substring(1);
            }
            return Integer.valueOf(value);
        }
    
    }
    

    See code example of this here