Как убрать повторяющиеся символы из строки в java

Как убрать повторяющиеся символы из строки в java

В этой статье мы научимся проверять слова на повторяющиеся символы, а также заменять и удалять найденные дубли. Это мы будет делать с помощью специального алгоритма, который сейчас и реализуем на Java.

Удаление повторяющихся символов из строки. Теория

Сегодня мы реализуем интересный метод, который принимают на вход строку, например, «jjjj», а на выходе выдает «j». Для этого мы не будет использовать сторонние библиотеки, а сделаем все на чистой Java.

Алгоритм удаления повторяющихся символом в строке мы реализуем в методе deleteDuplicates (String input), который принимает в качестве параметра строку с дублями и возвращает новую строку без дублей.

Суть алгоритма сводится к тому, что мы проходим по каждому символу строки и проверяем, не является ли он дубликатом уже найденного символа. Если он таким является, то вместо него вставляем 0. Так продолжается, пока мы не пройдем в цикле всю строку до конца. После цикла вызывается метод, который создает строку из массива символов, пропуская символы с нулями. Этот метод будет работать даже если входная строка содержит более одного повторяющегося символа. Такой алгоритм является brute force алгоритмом (т.н. полный перебор или метод «грубой силы»).

Как убрать повторяющиеся символы из строки. Практика

Ниже представлен метод удаления символов-дублей из входной строки:

Обратите внимание, что здесь можно обойтись и без переменной position, но для наглядности решил оставить.

Теперь запустим и посмотрим, что получилось:

Как видим, пустую строку метод вернул без изменений, так как ее длина меньше 2.

Вот такой простой способ проверки слов на повторяющиеся символы, замена и удаление найденных дублей.

Подписывайтесь на новые статьи по Java и Android!

2 thoughts to “Как убрать повторяющиеся символы из строки в java”

  1. Я в Jave начинающая, и в ООП не сильна. Хотелось бы научиться. 🙂 Но мне приходилось писать скрипты на JScript, и я бы решала данную задачу по-другому. Привожу свой вариант класса и прошу как специалиста оценить, следует ли так делать в Java. С точки зрения её, так сказать, философии. 🙂
    public class DeleteDuplicates1 {
    public static void main(String[] args) {
    String[] inputStrings = {«jjjaavva»,»jar»,»android»,»»,»qwertyqwerty»,»jajavava»};
    for (String input : inputStrings){
    System.out.println(input + » — » + replaceDuplicatesWithTemplate(input));
    }
    }
    // удаляем дубликаты из входной строки
    public static String replaceDuplicatesWithTemplate(String inputString) {
    // проверяем входную строку на валидность
    if (inputString == null || inputString.length() < 2) {
    return inputString;
    }
    String template = ""; // шаблон — копим символы, которые встретились
    String withoutD = ""; // строка без дублей
    String current; // текущий символ строки
    for(int i=0;i<inputString.length();i++){
    current = inputString.substring(i,i+1);
    if(i==0){
    template=current;
    withoutD=current;
    } else {
    if (template.indexOf(current)==-1) {
    withoutD+=current;
    template+=current;
    }
    }
    }
    return withoutD;
    }
    }

    1. Здравствуйте, Елена!
      Да, Ваш подход проще и хорошо читабельный. Я бы немного изменил Ваш метод, заменив строку withoutD на объект StringBuilder.
      Удачи в изучении Java 🙂

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *