Java教程

java 给乱序字符串进行排序

本文主要是介绍java 给乱序字符串进行排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

工作中遇到了批量选择了几条数据进行保存,但数据本身是有序号的(序号及其复杂并且没有规律),保存完以后就乱序了。

在没有设置权重的情况下,对这些数据进行排序就比较麻烦了。

在此,我想到了利用正则表达式进行对序号的识别并截取,然后通过重写排序方法进行排序。

// 乱序数据
String content0 = "1.13 nex1sdnvaeye啊啊啊";
String content1 = "第2.11条 .nexdnaeye";
String content2 = "3-13 nex34tsdnjavaeye";
String content3 = "第3.14条 necsdn2ae啊ye";
String content4 = "3.点.lov是e31 nex35tsdnjavaeye";
List<String> list = new ArrayList<>();
list.add(content4);
list.add(content0);
list.add(content3);
list.add(content1);
list.add(content2);

System.out.println(list);


// 输出后的内容
// [3.点.lov是e31 nex35tsdnjavaeye, 1.13 nex1sdnvaeye啊啊啊, 第3.14条 necsdn2ae啊ye, 第2.11条 .nexdnaeye, 3-13 nex34tsdnjavaeye]

 

 

方案一:对乱序数据中,有迹可循的序号进行正则表达式的截取。

public static String getStartDigits(String s) {

// 发现,数据中是含有“-”(横杠)的,所以要先把“-”转为“.” ,让其变为浮点数,来进行比较。

 String str = s.replace("-", ".");
// 然后通过正则来逐个匹配浮点数,浮点数缺少小数位的数,整数。
Matcher matcher;
if (str.contains(".")){
    matcher = Pattern.compile("(\\d[.]\\d)").matcher(str);
    if (matcher.find()){
        return  matcher.group(0);
    } else {
        matcher = Pattern.compile("(\\d[.])").matcher(str);
        return matcher.find()? matcher.group(0): "0";
    }
} else {
    matcher = Pattern.compile("\\d").matcher(str);
    return matcher.find()? matcher.group(0): "0";
}
}
// 注:如果匹配不成功,返回0; 对无法识别的复杂字符串,排序之后会置前。

方案二:对排序进行重写

public static void setSortByStartDigits(List<String> list) {
    list.sort((s1, s2) -> {
        double num1 = Double.parseDouble(getStartDigits(s1));
        double num2 = Double.parseDouble(getStartDigits(s2));
        return num1 - num2 > 0 ? 1 : -1;
    });
}

 

实践

public static void main(String[] args) {
    String content0 = "1.13 nex1sdnvaeye啊啊啊";
    String content1 = "第2.11条 .nexdnaeye";
    String content2 = "3-13 nex34tsdnjavaeye";
    String content3 = "第3.14条 necsdn2ae啊ye";
    String content4 = "3.点.lov是e31 nex35tsdnjavaeye";
    List<String> list = new ArrayList<>();
    list.add(content4);
    list.add(content0);
    list.add(content3);
    list.add(content1);
    list.add(content2);

    // 调用排序方法
    StringSortUtil.setSortByStartDigits(list);
    System.out.println(list);
}

// 输出内容
// [1.13 nex1sdnvaeye啊啊啊, 第2.11条 .nexdnaeye, 3.点.lov是e31 nex35tsdnjavaeye, 3-13 nex34tsdnjavaeye, 第3.14条 necsdn2ae啊ye]

完整工具类

 
/*
* 字符串集合排序工具
*/
public class StringSortUtil {
// 取出字符串前面的数字
public static String getStartDigits(String s) {
    String str = s.replace("-", ".");
    Matcher matcher;
    if (str.contains(".")){
        matcher = Pattern.compile("(\\d[.]\\d)").matcher(str);
        if (matcher.find()){
            return  matcher.group(0);
        } else {
            matcher = Pattern.compile("(\\d[.])").matcher(str);
            return matcher.find()? matcher.group(0): "0";
        }
    } else {
        matcher = Pattern.compile("\\d").matcher(str);
        return matcher.find()? matcher.group(0): "0";
    }
}


 // 功能描述: 根据字符串集合中开头的序号进行排序(支持double)
public static void setSortByStartDigits(List<String> list) {
    list.sort((s1, s2) -> {
        double num1 = Double.parseDouble(getStartDigits(s1));
        double num2 = Double.parseDouble(getStartDigits(s2));
        return num1 - num2 > 0 ? 1 : -1;
    });
}
}

 

这篇关于java 给乱序字符串进行排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!