编程语言
首页 > 编程语言> > 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,String,matcher,list,add,str,return,排序,乱序
来源: https://www.cnblogs.com/ggos/p/15325352.html