2013-11-28 5 views
0

Я пытаюсь написать код, который принимает String и удаляет повторяющиеся символы в этом String.Удаление повторяющихся символов, сохраняющий заказ

String utenRepetisjon(String tekst) { 

    String b; 

    char[] tekstArray = tekst.toCharArray(); 
    char[] tilTekst = new char[tekstArray.length]; 

    for(int i=0; i<tekstArray.length; i++) { 
     for(int j=0; j<tekst.length(); j++) { 
      if(tekstArray[i] != tekst.charAt(j)) { 
       tilTekst[i] = tekstArray[i]; 
      } 
     } 
    } 
    return b = new String(tilTekst); 
} 

E.g. Если tekst = "aababbabbac", он должен вернуть "abc". Пока мой код возвращает только один и тот же TEKST, что он дал ..

+1

Посмотрите на эту ссылку: http://stackoverflow.com/questions/4989091/removing-duplicates-from-a-string-in-java – T0to

+0

Как ваш код должен работать ? tilTekst создается с той же длиной, что и tekst, что не имеет смысла в вашей проблеме, потому что возвращаемая строка довольно часто меньше. –

ответ

5

Попробуйте следующее:

String utenRepetisjon(String tekst) { 
    String str = ""; 
    for(char ch : tekst.toCharArray()) { 
     if (str.indexOf(ch) == -1) { 
      str += ch; 
     } 
    } 
    return str; 
} 
+2

Было бы лучше с помощью 'StringBuilder' или массива символов. Но это работает. –

+0

+1 для элегантного решения. –

+2

Nice, короткое решение. Но он может пострадать от печально известной проблемы String-concatenation, когда tekst очень длинный. StringBuilder не работает, поскольку у него нет indexOf (char). – isnot2bad

-1

Вот код. Используйте HashMap

String tekst = "aababbabbac"; 
    char[] testArray = tekst.toCharArray(); 
    Hashtable<String, String> hash = new Hashtable<String, String>(); 
    for (char c : testArray) { 
     if (!hash.containsKey("" + c)) { 
      hash.put("" + c, "1"); 
     } 
    } 
    String dups = ""; 
    for (String key : hash.keySet()) { 
     dups+=key; 
    } 
    System.out.println(dups); 
+1

Что печатает bac не abc. Вам нужно сохранить порядок букв в исходном слове (а не в downvoter). –

+0

Ya. Я думал, что он хочет просто фильтровать дубликаты ... И спасибо за негатив! – sanket

+0

Я не извиняюсь. –

Смежные вопросы