Я создаю метод 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 и сравниваю каждый символ.
Мой вопрос: это наиболее эффективный способ сделать это или есть лучший способ лексикографически сравнить каждую строку в тех случаях, когда строки имеют одинаковую длину?
else
вы можете просто сделатьreturn this.internalStr.compareTo(altStr2.internalStr);
. - person Paul Boddington   schedule 15.11.2015internalStr
неAltString
. Мы все предполагаем, что этоString
, но на самом деле вы этого не говорите ... - person Paul Boddington   schedule 15.11.2015while ==
. Также java.text.Normalizer может быть полезным, поскольку один текст Unicode может быть записан как разные строки.ĉ
как одна или две кодовые точки:c
плюс^
нулевой длины. Вторая форма удобнее для сортировки, - person Joop Eggen   schedule 15.11.2015return this.internalStr.compareTo(altStr2.internalStr);
послеelse
рекурсией в этом случае? Я думал, что это так, и поэтому вместо этого использовал цикл while. - person Omar N   schedule 15.11.2015String.compareTo
отличается от методаAltString.compareTo
. Просто у них одно и то же имя. - person Paul Boddington   schedule 15.11.2015