В этой статье мы научимся проверять слова на повторяющиеся символы, а также заменять и удалять найденные дубли. Это мы будет делать с помощью специального алгоритма, который сейчас и реализуем на Java.
Удаление повторяющихся символов из строки. Теория
Сегодня мы реализуем интересный метод, который принимают на вход строку, например, «jjjj», а на выходе выдает «j». Для этого мы не будет использовать сторонние библиотеки, а сделаем все на чистой Java.
Алгоритм удаления повторяющихся символом в строке мы реализуем в методе deleteDuplicates (String input), который принимает в качестве параметра строку с дублями и возвращает новую строку без дублей.
Суть алгоритма сводится к тому, что мы проходим по каждому символу строки и проверяем, не является ли он дубликатом уже найденного символа. Если он таким является, то вместо него вставляем 0. Так продолжается, пока мы не пройдем в цикле всю строку до конца. После цикла вызывается метод, который создает строку из массива символов, пропуская символы с нулями. Этот метод будет работать даже если входная строка содержит более одного повторяющегося символа. Такой алгоритм является brute force алгоритмом (т.н. полный перебор или метод «грубой силы»).
Как убрать повторяющиеся символы из строки. Практика
Ниже представлен метод удаления символов-дублей из входной строки:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
public class DeleteDuplicates {
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;
}
// возможная позиция дублирующего символа
int position = 1;
char[] characters = inputString.toCharArray();
for (int i = 1; i < inputString.length(); i++) {
int j;
// находим уже пройденную позицию
for (j = 0; j < position; ++j) {
if (characters[i] == characters[j]) {
break;
}
}
// если это символ в этой же позиции, то идем к следующему символу
if (j == position) {
characters[position] = characters[i];
++position;
// иначе заменяем его на шаблон 0 и переходим к следующему символу
} else {
characters[position] = 0;
++position;
}
}
return getStringWithoutDuplicates(characters);
}
public static String getStringWithoutDuplicates(char[] inputChars) {
StringBuilder stringBuilder = new StringBuilder(inputChars.length);
for (char character : inputChars) {
// если символ не равен шаблону 0, то это не дубль,
// значит сохраняем его
if (character != 0) {
stringBuilder.append(character);
}
}
return stringBuilder.toString();
}
}
|
Обратите внимание, что здесь можно обойтись и без переменной
position
, но для наглядности решил оставить.
Теперь запустим и посмотрим, что получилось:
jjjaavva - jav
jar - jar
android - androi
-
qwertyqwerty - qwerty
jajavava - jav
|
Как видим, пустую строку метод вернул без изменений, так как ее длина меньше 2.
Вот такой простой способ проверки слов на повторяющиеся символы, замена и удаление найденных дублей.
Источник: http://prologistic.com.ua/kak-ubrat-povtoryayushhiesya-simvoly-iz-stroki-v-java.html
Смотри также:
- Зачем нужна Java. http://fetisovvs.blogspot.com/2014/07/java.html
- Как вы можете сделать Java лучше. http://fetisovvs.blogspot.com/2016/05/apache-poi-microsoft-office-java-java.html
- Двести пятьдесят русскоязычных обучающих видео докладов и лекций о Java. http://fetisovvs.blogspot.com/2015/12/java-5-java-java.html
- Ввод–вывод в Java. http://fetisovvs.blogspot.com/2016/05/java-java_28.html
- Шпаргалка Java программиста 7.1 Типовые задачи: Оптимальный путь преобразования InputStream в строку. http://fetisovvs.blogspot.com/2016/04/java-71-inputstream-java.html
- Шпаргалка Java программиста 8. Библиотеки для работы с Json (Gson, Fastjson, LoganSquare, Jackson, JsonPath и другие). http://fetisovvs.blogspot.com/2016/04/java-8-json-gson-fastjson-logansquare.html
- Как установить соединение с СУБД MySQL в IntelliJ IDEA в редакции Community. http://fetisovvs.blogspot.com/2016/04/mysql-intellij-idea-community-java.html
- Программируем… выход из лабиринта. http://fetisovvs.blogspot.com/2015/10/java.html
- Игра на чистой Java от новичка, для новичков. http://fetisovvs.blogspot.com/2015/09/java-java.html
Комментариев нет:
Отправить комментарий