2014-10-26 2 views
-1

В принципе, назначение является задницей и не хочет, чтобы мы использовали существующий метод для сравнения двух строк в алфавитном порядке.Сравнение строк без использования String.compareTo в Java

Он должен возвращать 1, если первая строка «больше» в алфавитном порядке, чем вторая (в том смысле, что «g» больше, чем «a»), -1, если вторая больше, или 0, если они являются одна и та же.

Допустим, у меня есть

String a = "Cows"; 
String b = "Horses"; 

метод возвращает -1.

Мое понимание использовать для() цикл сканирования А и Б, используя Шара(), но я понятия не имею, как реализовать это ...

EDIT ***

прочитав ответы, я придумал это.

int compared = 0; 
    for (int i = 0; i<s1.length() && i<s2.length(); i++){ 
     int a = s1.charAt(i); 
     int b = s2.charAt(i); 
     if(a < b){ 
      compared = -1; 
     } 
     else if(a > b){ 
      compared = 1; 
     } 
    } 
    return compared; 

Строки, которые сравниваются, начинаются с прописных букв, поэтому это не должно быть проблемой. Тем не менее, при использовании обычного метода String.compareTo() и метода bubblesort, который подсчитывает количество раз, когда этот метод вызывался при сортировке массива строк с предварительным прерыванием, я получаю разные результаты, что означает, что что-то явно не так.

Для людей, просматривающих это и с той же проблемой, вот как работает код

int compared = 0; 
    //program assumes strings are equal 

    for (int i = 0; i<s1.length() && i<s2.length(); i++){ 
     //for() loop goes on until the largest string 
     int a = s1.charAt(i); 
     int b = s2.charAt(i); 
     //convert char into int for comparison just in case 
     if(a < b){ 
      compared = -1; 
      break; 
      //breaks at the first occurence of non equal characters 
     } 
     else if(a > b){ 
      compared = 1; 
      break; 
      //same as above 
     } 
    } 
    return compared; 
+2

Похоже, что у вас есть идея. Это 'for' loop и' charAt' вещь. Попробуй это. – khelwood

ответ

1

Без действительно дает вам ответ, учитывая это домашнее задание, я думаю, я могу указать вам на правильном направлении.

Ваше понимание использования цикла for для итерации по двум словам правильное, а также использование String.charAt. Теперь я хочу, чтобы вы начали с того, чтобы найти конец цикла for - то есть узнать, сколько символов вы должны перебирать?

Подсказка:

'б'> 'а'

Эта подсказка имеет ловушку в нем, хотя. Что вы должны делать, учитывая следующие строки?

Haskell

ява

намек на это тоже:

'A' < 'а'

+0

аргументы для цикла for for:: (int i = 0; i

+0

Это правильно. Теперь сравните каждый символ обоих слов по одному :) –

+0

забыл добавить случай должен быть нечувствительным, но я не могу использовать toUpperCase()/toLowerCase() –

1

Да ваша идея правильный путь , Цифры между символами обеих строк при их сравнении. Чтобы сравнить персонаж, который вы получили как (int), чтобы получить код ASCII, затем, сравнивая код ASCII каждой буквы, вы можете решить, какой из них - >< или =.

0
public int strCompare(String a,String b) 
{ 
    int i=0; 

    while(i<a.length()&&i<b.length()&&(a.charAt(i)==b.charAt(i))) 
    { 
     i++;   

    } 
    if(i==a.length()&&i==b.length()) 
     return 0; 
    if(i>=a.length()) 
     return -1; 
    else if(i>=b.length()) 
     return 1; 
return a.charAt(i)-b.charAt(i); 
} 
Смежные вопросы