Уменьшите String.charAt до одного цикла во время сравнения строк - PullRequest
1 голос
/ 21 ноября 2011

Мне нужно сравнить две строки различной длины, и поэтому я написал два условных цикла в зависимости от того, какая строка самая длинная:

boolean compare(String first, String second)  
{  
   boolean firstLongest = first.length() > second.length();  
   if(firstLongest)  
      {
         for(int i = 0; i < first.length(); i++)  
             //charAt code here  
       }
    else{   
            for(int i = 0; i < second.length();i++)  
              //charAt code here
         }  

}

Я решил переписать это так:

boolean compare(String first, String second)  
    {  
       int lengthDifference = first.length() - second.length(); 
       for(int i = 0; i < first.length() + lengthDifference;i++)  
         //charAt code here    
    }

Я хочу избежать 1) двух циклов и 2) исключений за пределами границ.У меня вопрос: есть ли в приведенной выше реализации угловой случай, который я пропускаю, или это должно работать для всех возможных входных данных?

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Ваша исправленная версия сломается, если вторая строка длиннее.

Используйте:

int combinedLength = Math.min(first.length(), second.length());

, тогда ваше условие должно быть только:

i < combinedLength
1 голос
/ 21 ноября 2011

Просто используйте самый низкий:

//Maybe knowing what the length diff is interesting to achieve your goal:
int lenDiff = Math.abs(first.length() - second.length());

// The loop, taking the length of the shortest one as limit
for (int i = 0; i < Math.min(first.length(), second.length()); ++i)
{
    // Char code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...