package com.allen.es.demo.service;
import java.text.Collator;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class OrderWrapper implements Comparable {
String name;
public OrderWrapper(String name) {
this.name = name;
}
@Override
public String toString() {
return String.valueOf(name);
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (obj instanceof OrderWrapper) {
OrderWrapper other = (OrderWrapper) obj;
return null == this.name ? false : this.name.equals(other.name);
}
return false;
}
@Override
public int compareTo(Object o) {
OrderWrapper wrapper = (OrderWrapper) o;
if (null == wrapper) {
return 1;
}
if (this == wrapper || this.equals(wrapper)) {
return 0;
}
String name1 = this.name;
String name2 = wrapper.name;
if (null == name1) {
return null == name2 ? 0 : -1;
} else if (null == name2) {
return 1;
}
Pattern pattern = Pattern.compile("\\D*(\\d+)\\D*");
Matcher matcher1 = pattern.matcher(name1);
Matcher matcher2 = pattern.matcher(name2);
int index1 = 0;
int index2 = 0;
while (matcher1.find()) {
String s1 = matcher1.group(1);
String s2;
if (matcher2.find()) {
s2 = matcher2.group(1);
} else {
break;
}
index1 = name1.indexOf(s1, index1);
index2 = name2.indexOf(s2, index2);
if (index1 != index2) {
break;
}
String pre1 = name1.substring(0, index1);
String pre2 = name2.substring(0, index2);
if (!Objects.equals(pre1, pre2)) {
break;
}
long num1 = Long.parseLong(s1);
long num2 = Long.parseLong(s2);
if (num1 == num2) {
name1 = name1.substring(s1.length());
name2 = name2.substring(s2.length());
continue;
} else {
return (int) (num1 - num2);
}
}
return Collator.getInstance(Locale.CHINA).compare(this.name, wrapper.name);
}
public static void testNew() {
List<OrderWrapper> chinesesOrderList = new ArrayList();
chinesesOrderList.add(new OrderWrapper("【】"));
chinesesOrderList.add(new OrderWrapper("【2】你是1"));
chinesesOrderList.add(new OrderWrapper("【1】你是111"));
chinesesOrderList.add(new OrderWrapper("【1】你是22吗"));
chinesesOrderList.add(new OrderWrapper("【1】你是11吗"));
chinesesOrderList.add(new OrderWrapper("【1】你是2吗"));
chinesesOrderList.add(new OrderWrapper("【1】你是1吗"));