2015-11-19 3 views
1

Я работаю на Anagram программы и я в настоящее время работаю над методом, который называется diff, который должен возвращать StringBuffer, содержащий символы, которые находятся в первой StringBuffer, но не во втором один. Так, например, если StringBuffers равны abba и acca, тогда мой метод diff должен возвращать bb. Пока у меня есть цикл с выражением if, но он не работает. Любая помощь будет оценена по достоинству. Благодаряразница находки Java между символами в StringBuffer

public StringBuffer diff(){ 
    StringBuffer diffVal = null; 

    for (int i =0; i < sBuffer1.length(); i++){ 
     String let1 = String.valueOf(sBuffer1); 
     if (sBuffer2.indexOf(let1) == -1){ 

     } 

    } 
    return diffVal; 
+0

Вы сравниваете весь буфер преобразуется в строку. Поэтому лучше использовать индекс в цикле. проверьте для каждого символа, а не для всего буфера – SacJn

+0

Почему «StringBuffer» мертв и похоронен в школах? –

+0

Пожалуйста, не используйте StringBuffer, поскольку он был заменен StringBuilder более десяти лет назад. –

ответ

0

Я думаю, что вы пытаетесь использовать цикл для изучения одного символа на один символ в sBuffer1. Но String let1 = String.valueOf(sBuffer1); дает вам целую строку sBuffer1.

Вам нужно, чтобы String let1 = sBuffer1.substring(i, i + 1) взял один символ из sBuffer1, чтобы проверить, существует ли он в sBuffer2.

Например:

public static StringBuffer diff(StringBuffer sBuffer1, StringBuffer sBuffer2) { 
    StringBuffer diffVal = new StringBuffer(); 

    for (int i = 0; i < sBuffer1.length(); i++) { 
     String let1 = sBuffer1.substring(i, i + 1); // get the character from sBuffer1 
     if (sBuffer2.indexOf(let1) == -1) { 
      diffVal.append(let1); // append the character to the diff 
     } 
    } 

    return diffVal; 
} 
0

хорошо это может работать, ваша логика была немного неправильно, этот код прямо вперед. поиск символа, если он не существует во втором буфере строк, добавляет его в результат SF.

public StringBuffer diff(){ 
     StringBuffer diffVal = new StringBuffer();//initialize before you use it. 

     for (int i =0; i < sBuffer1.length(); i++){ 
      String let1 = String.valueOf(sBuffer1.charAt(i))//get the character at the ith position. 
      if (sBuffer2.indexOf(let1) == -1){ 
       diffVal.append(let1); 
      } 

     } 
     return diffVal; 
    } 
0

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

StringBuilder diffVal= new StringBuilder(); 

      StringBuffer sBuffer1 = new StringBuffer("abbad");//input 1 
      StringBuffer sBuffer2 = new StringBuffer("acca");//input 2, you can ignore if you have already passed/defined these 
      for (int i =0; i < sBuffer1.length(); i++){    
       if(i >= sBuffer2.length()){//handles difference in input string length 
        diffVal.append(sBuffer1.substring(i, sBuffer1.length())); 
        break; 
       } 
      if (sBuffer1.charAt(i) != sBuffer2.charAt(i)) { 
       diffVal.append(sBuffer1.charAt(i)); 
      } 

      } 
      System.out.println(diffVal);// I am printing it here 

из положить является: bbd

Одна рекомендация здесь использовать StringBuilder если вы струны вы используете здесь не требуется, чтобы быть synchronized