2014-03-03 2 views
3

У меня есть два списка String, так же, как показано ниже:Строка индекс Разница между двумя строками

List1 (Порожденных SQL результирующем)

10001 
10100 
10001 

List2 (порожденных SQL результирующем)

10000 
10000 
10000 

Кнопка Действие;

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
     try { 
      // TODO add your handling code here: 
      createList1(); 
      createList2(); 
      difference(); 
     } catch (Exception ex) { 
      Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex); 
     }  
    }  

разность void;

public void difference(){ 
     int minLen = Math.min(List1.get(0).length(), List2.get(0).length()); 
     for (int i = -1 ; i != minLen ; i++) { 
      char chA = List1.get(0).charAt(i); 
      char chB = List2.get(0).charAt(i); 
     if (chA != chB) { 
     System.out.println(chA); 
     } 
     } 
    } 

Я хочу найти какой индекс числа различны в List1 для индекса 0.

Спасибо заранее.

+1

'я == -1' не является допустимым индексом. Вы не можете вызвать 'charAt (i)' и передать '-1' в качестве аргумента, потому что это вызовет исключение. – dasblinkenlight

ответ

5

сделать цикл, который итерирует индекс i от нуля длина наименьшего из двух строк, и сравнить символы один за другим, с помощью оператора ==:

int minLen = Math.min(a.length(), b.length()); 
for (int i = 0 ; i != minLen ; i++) { 
    char chA = a.charAt(i); 
    char chB = b.charAt(i); 
    if (chA != chB) { 
     ... 
    } 
} 

Перед началом сравнения вы должны проверить, что a и b не null. В противном случае получение длины вызовет исключение нулевой ссылки.

+0

Мне нравится этот метод. Но я получаю исключение null, когда я сравниваю значения. Позвольте мне изменить свой вопрос. –

+0

Спасибо за простое решение @dasblinkenlight –

0

Do цикл в Список 1 и List2, и сравнить значение индекса, как, Я полагаю, что и список имеет такой же размер так,

for(int i=0;i<list1.size();i++) 
{ 
    if(!list1.get(i).equals(list2.get(i)) 
    { 
    System.out.println("Not equal value of Index="+i); 
    } 
} 
0

Предполагая, что две струны всегда будут иметь одинаковую длину ...

String first = "10000"; 
String second = "10101"; 

ArrayList differentIndexes = new ArrayList(); 

for(int i=0; i<first.length(); i++){ 
if(first.charAt(i)!=second.charAt(i)){ 
differentIndexes.add(i); 
} 
} 
1

Попробуйте это:

public List<Integer> findDiffIndexes(String s1, String s2) { 
    List<Integer> indexes = new ArrayList<Integer>(); 
    for(int i = 0; i < s1.length() && i < s2.length(); i++) { 
     if(s1.charAt(i) != s2.charAt(i)) { 
      indexes.add(i); 
     } 
    } 
    return indexes; 
} 
0

https://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringUtils.html#difference%28java.lang.String,%20java.lang.String%29

разница общественности статической String (Строка str1, Строка str2)

Сравнивает две строки и возвращает часть, где они отличаются. (Точнее, верните оставшуюся часть второй строки, начиная с , где она отличается от первой.)

Например, разница («Я машина», «Я робот») -> «робот» ».

StringUtils.difference(null, null) = null 
StringUtils.difference("", "") = "" 
StringUtils.difference("", "abc") = "abc" 
StringUtils.difference("abc", "") = "" 
StringUtils.difference("abc", "abc") = "" 
StringUtils.difference("ab", "abxyz") = "xyz" 
StringUtils.difference("abcde", "abxyz") = "xyz" 
StringUtils.difference("abcde", "xyz") = "xyz" 


Parameters: 
    str1 - the first String, may be null 
    str2 - the second String, may be null 
Returns: 
    the portion of str2 where it differs from str1; returns the empty String if they are equal 
Since: 
    2.0 
Смежные вопросы