java list集合中抽取每个字符串元素中的数字进行排序

就是这个样子,通过后面的数字给每个元素排序,注(字和数字是一个元素)list集合
在线等
我是说1.拿出字符串中的数字,2.对数字进行排序3,对应到原来带数字那个字符串的排序,我想问1.我怎么拿到数字?比如我是56,你确定拿出来的是int型56,而不是字符串“56”,2.对数字排序后,怎么让原始字符串排序.......................................

    分析问题,集合中每一个元素都含有数字,需要得到里面的数字存入一个集合或者数组中

    循环遍历字符串,根据下标判断每一个字符是否是数字,是的话加入一个空的字符串中,遍历一遍后得到原字符串中的数字字符串,转换成数字存入数组,进行升序排序

    import java.util.ArrayList;
    import java.util.Arrays;

    public class Test20 {

    public static int getNum(String s) {// 获取字符串中的数字
    String num = "";
    for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {// 遍历判断是否为数字
    num += s.charAt(i);
    }
    }
    return Integer.parseInt(num);
    }

    public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();// 字符串集合
    list.add("abc123");
    list.add("我是栗子1");
    list.add("我是栗子2");
    list.add("我是栗子3是栗子4");
    list.add("栗子100"); // 例子
    int[] array = new int[list.size()];// 定义一个数组用来存放数字
    for (int i = 0; i < list.size(); i++) {
    array[i] = getNum(list.get(i));// 遍历集合,调用方法获得里面的数字并存入数组
    }
    Arrays.sort(array);// 升序排序
    for (int i : array) {
    System.out.println(i);// 遍历输出
    }
    }
    }

    结果:

    1
    2
    34
    100
    123

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-08-07
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(s);
if(m.find()){
    int num = Integer.valueOf(m.group());//截取到数字
    
}

获得数字后就是排序了。。冒泡或者快排 这个很容易搜到吧

追问

你说的单独的排序这简单的刚学java的都会,我是说1.拿出字符串中的数字,2.对数字进行排序3,对应到原来带数字那个字符串的排序,我想问1.我怎么拿到数字?比如我是56,你确定拿出来的是int型56,而不是字符串“56”,2.对数字排序后,怎么让原始字符串排序.......................................

追答

1.你没看我写的么? m.group()就是取得字符串 ,Integer.valueOf(m.group())就是转成int型啊!
2.这个你得动脑啊,比如,循环的去数字的时候,取得数字存一份到一个新的List,存个HashMap,List的每项item为key,下标为value,然后给新的list排序。排完循环新的list,每次取出一个值去之前的map里面取得原下标就可以取到原list中的值,然后原list.set(当前循环下标,原list值)....不知道你能不能听懂

第2个回答  2015-08-07
import java.util.*;

public class Ex implements Comparator<String>{

List<String> list = new ArrayList<String>();

public static void main(String[] args) {
new Ex();
}

public Ex() {
list.add("abc3");
list.add("xya2");
list.add("ddd1");
list.add("fas93");
list.add("lkk30");
list.add("mmm78");
list.add("ccd12");
System.out.println(list);
list.sort(this);
System.out.println(list);
}

@Override
public int compare(String s1, String s2) {
return getNum(s1) - getNum(s2);
}

private int getNum(String s) {
String n = new String();
for(int i = s.length() - 1; i >= 0 && s.charAt(i) >= '0' && s.charAt(i) <= '9'; i--)
n = s.charAt(i) + n;
return Integer.valueOf(n).intValue();
}

}

做个字符串的比较器,然后直接sort

运行结果


[abc3, xya2, ddd1, fas93, lkk30, mmm78, ccd12]

[ddd1, xya2, abc3, ccd12, lkk30, mmm78, fas93]


是否符合你的要求

第3个回答  2015-08-07
详情参考http://www.cnblogs.com/android-html5/archive/2012/06/02/2533926.html,就不给你贴代码了,就是字符串的处理,算是基本功。追问

你说的单独的排序这简单的刚学java的都会,我是说1.拿出字符串中的数字,2.对数字进行排序3,对应到原来带数字那个字符串的排序,我想问1.我怎么拿到数字?比如我是56,你确定拿出来的是int型56,而不是字符串“56”,2.对数字排序后,怎么让原始字符串排序.......................................你告诉我这是基本功?

相似回答