我是否正确地按字典顺序比较字符串?
Am I comparing strings lexicographically correctly?
我正在创建一个方法 compareTo(AltString altStr2)
按字符串的长度(从最短到最长)对字符串进行排序。
不过,我想更进一步检查长度相同的字符串。在那种情况下,我认为最好按字典顺序对字符串进行排序,这样它们的排序方式与它们在字典中出现的方式相同。到目前为止,我的代码如下。
public class AltString {
String internalStr;
public AltString(String str) {
internalStr = str;
}
public String toString() {
return internalStr;
}
public int compareTo(AltString altStr2) {
if (this.internalStr.length() < altStr2.internalStr.length()) {
return -1;
} else if (this.internalStr.length() > altStr2.internalStr.length()) {
return 1;
} else {
int idx = 0;
while (this.internalStr.charAt(idx) != altStr2.internalStr.charAt(idx)) {
if (this.internalStr.charAt(idx) < altStr2.internalStr.charAt(idx)) {
return -1;
}else if (this.internalStr.charAt(idx) > altStr2.internalStr.charAt(idx)) {
return 1;
} else {
idx += 1;
public static void main(String[] args) {
// some test code for the AltString class
String [] list = {"fortran", "java", "perl", "python", "php", "javascrip", "c", "c++", "c#", "ruby"};
AltString [] alist = new AltString[list.length];
for (int i=0; i<alist.length; i++) {
alist[i] = new AltString(list[i]);
}
Arrays.sort(list);
Arrays.sort(alist);
System.out.println("String sort:");
for (int i=0; i<list.length; i++) {
System.out.println(list[i]);
}
System.out.println("\nAltString sort:");
for (int i=0; i<alist.length; i++) {
System.out.println(alist[i]);
}
}
我必须坚持的部分是按字典顺序比较字符串。目前,我有我的代码设置,所以我进入一个 while 循环并比较每个字符。
我的问题是,这是最有效的方法吗?或者在字符串长度相同的情况下,是否有更好的方法按字典顺序比较每个字符串?
根据 Tunaki 和 JB Nizet 的建议,您可以使用 Integer.compare
和 String.compareTo
。使用 String.compareTo
不算递归。递归是指从自身调用方法,但 String.compareTo
与 AltString.compareTo
.
是不同的方法
public int compareTo(AltString altStr2) {
int temp = Integer.compare(this.internalStr.length(), altStr2.internalStr.length());
return temp != 0 ? temp : this.internalStr.compareTo(altStr2.internalStr);
}
我正在创建一个方法 compareTo(AltString altStr2)
按字符串的长度(从最短到最长)对字符串进行排序。
不过,我想更进一步检查长度相同的字符串。在那种情况下,我认为最好按字典顺序对字符串进行排序,这样它们的排序方式与它们在字典中出现的方式相同。到目前为止,我的代码如下。
public class AltString {
String internalStr;
public AltString(String str) {
internalStr = str;
}
public String toString() {
return internalStr;
}
public int compareTo(AltString altStr2) {
if (this.internalStr.length() < altStr2.internalStr.length()) {
return -1;
} else if (this.internalStr.length() > altStr2.internalStr.length()) {
return 1;
} else {
int idx = 0;
while (this.internalStr.charAt(idx) != altStr2.internalStr.charAt(idx)) {
if (this.internalStr.charAt(idx) < altStr2.internalStr.charAt(idx)) {
return -1;
}else if (this.internalStr.charAt(idx) > altStr2.internalStr.charAt(idx)) {
return 1;
} else {
idx += 1;
public static void main(String[] args) {
// some test code for the AltString class
String [] list = {"fortran", "java", "perl", "python", "php", "javascrip", "c", "c++", "c#", "ruby"};
AltString [] alist = new AltString[list.length];
for (int i=0; i<alist.length; i++) {
alist[i] = new AltString(list[i]);
}
Arrays.sort(list);
Arrays.sort(alist);
System.out.println("String sort:");
for (int i=0; i<list.length; i++) {
System.out.println(list[i]);
}
System.out.println("\nAltString sort:");
for (int i=0; i<alist.length; i++) {
System.out.println(alist[i]);
}
}
我必须坚持的部分是按字典顺序比较字符串。目前,我有我的代码设置,所以我进入一个 while 循环并比较每个字符。
我的问题是,这是最有效的方法吗?或者在字符串长度相同的情况下,是否有更好的方法按字典顺序比较每个字符串?
根据 Tunaki 和 JB Nizet 的建议,您可以使用 Integer.compare
和 String.compareTo
。使用 String.compareTo
不算递归。递归是指从自身调用方法,但 String.compareTo
与 AltString.compareTo
.
public int compareTo(AltString altStr2) {
int temp = Integer.compare(this.internalStr.length(), altStr2.internalStr.length());
return temp != 0 ? temp : this.internalStr.compareTo(altStr2.internalStr);
}