我搜索了Java中使用的词典排序的完整表格,但没有用。
我找到整理模式。但我需要的是一个包括大写和小写字母,数字,运算符,空格的字母。
我知道空间是排序中的第一个,剩下的就是什么?
完成我的第一个问题,我的第二个问题是:
compareTo
方法返回的数字到底告诉您什么?
对于前。相隔多少个字母是两个不同单词的相同索引的两个字母?
答案 0 :(得分:2)
比较基于字符串中每个字符的Unicode值。所以基本上,compareTo()
将每个字符串视为一系列16位无符号整数。这是一个Unicode chart,因此您可以看到它们的顺序。
基本上,没有人知道compareTo
返回值的大小是什么,只是符号。在实践中,大多数compareTo
实现将返回-1,0或1,但合同明确表示正面或负面,您应该相应地编写代码(例如,使用int compare = a.compareTo(b); if(compare > 0) {...} else...)
。
在这种情况下,compareTo返回两个字符串中位置k>的两个字符值的差值 - 即值:
this.charAt(k)-anotherString.charAt(k)
如果没有它们不同的索引位置,那么较短的字符串按字典顺序排在较长的字符串之前。在这种情况下,compareTo返回字符串长度的差异 - 即值:
this.length()-anotherString.length()
答案 1 :(得分:0)
您可以使用非ascii代码替换空格
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test1 {
public static void main(String[] args) {
List<String> data = new ArrayList<String>(Arrays.asList(
"pqrst",
"Abcdef",
"Lmno",
" uvw",
"xyz",
"Ghijk"
));
Collections.sort(data, new MyDataComparator());
for (String s : data) {
System.out.println(s);
}
}
}
class MyDataComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
String regex = " ";
byte[] b = { (byte) 0x80 }; // out of ascii code
Pattern p = Pattern.compile(regex);
Matcher m1 = p.matcher(s1);
Matcher m2 = p.matcher(s2);
String r1 = m1.replaceAll(new String(b));
String r2 = m2.replaceAll(new String(b));
return r1.compareTo(r2);
}
}
输出是:
Abcdef
Ghijk
Lmno
pqrst
xyz
uvw