java中的自定义字符串排序
我已经用java编写了一个java程序来按字母顺序对字符串排序。问题是,当它对带有罗马数字的字符串进行排序时,它会将其视为字符并相应地进行排序java中的自定义字符串排序,java,sorting,Java,Sorting,我已经用java编写了一个java程序来按字母顺序对字符串排序。问题是,当它对带有罗马数字的字符串进行排序时,它会将其视为字符并相应地进行排序 import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class SampleCustomSortApp { @SuppressWarnings("unchecked") public static voi
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class SampleCustomSortApp
{
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
ArrayList<String> titles =new ArrayList();
titles.add("java");
titles.add("J-IV");
titles.add("A-V");
titles.add("J-V");
titles.add("J-IX");
titles.add("J-XX");
titles.add("J-X");
titles.add("J-I");
titles.add("J-II");
titles.add("datawarehouse");
titles.add("oracledba");
System.out.println("Before Sorting Elements Are :"+titles+"\n");
Collections.sort(titles, new MyCustomCompator());
System.out.println("After Sorting Elements Are :"+titles);
}
}
class MyCustomCompator implements Comparator
{
public int compare(Object s1,Object s2)
{
String one = (String)s1;
String two = (String)s2;
/* for ascending order */
if(one.compareTo(two)>0){
return 1;
}else{
return -1;
}
}
}
期望输出
Before Sorting Elements Are :[java, J-IV, A-V, J-V, J-IX, J-XX, J-X, J-I, J-II, datawarehouse, oracledba]
After Sorting Elements Are :[A-V, J-I, J-II, J-IV, J-V,J-IX, J-X, J-XX, datawarehouse, java, oracledba]
我应该使用正则表达式来比较字符串吗。有人能告诉我解决方案吗?您肯定需要自己的
比较器
,它能正确解析罗马数字。解析的工作(自然)已经解决了,所以您只需要将字符串分成字母和数字部分。有关罗马数字解析代码的示例,请参阅。如果能够提取字符串中的罗马数字,则可以在比较器中使用罗马数字解析器。将罗马数字替换为阿拉伯数字,然后比较字符串。您必须将阿拉伯数字左键填充为零,以便它们都具有相同的位数。下面是一个在Java中使用这种解析器的示例
Before Sorting Elements Are :[java, J-IV, A-V, J-V, J-IX, J-XX, J-X, J-I, J-II, datawarehouse, oracledba]
After Sorting Elements Are :[A-V, J-I, J-II, J-IV, J-V,J-IX, J-X, J-XX, datawarehouse, java, oracledba]