Java подсчитывает количество изменений в цифрах, специальных символах и буквах в строке

Я хотел бы подсчитать количество изменений цифр, специальных символов и букв в строке, например:

`215348-jobpoint` 

содержит 3 изменения с "8" на специальный символ "-" на букву "j". Итак, в основном, я пытаюсь перебрать массив символов и проверить фактический и следующий символ в этом массиве, если фактический и следующий символ имеют один и тот же экземпляр типа. Например, если они имеют одинаковый алфавит (букву) или один и тот же номер экземпляра или один и тот же тип специальных символов... Как я могу это сделать?

Звучит для меня очень похоже на алгоритм расстояния Левенштейна. См., например, здесь: baeldung.com/java-levenshtein-расстояние

Robert 22.05.2019 13:18

Вы можете создать служебный класс/метод и увеличивать счетчик каждый раз, когда вы попадаете в другой диапазон. Посмотрите на это: geeksforgeeks.org/…

gozluklu_marti 22.05.2019 13:53
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
1
2
374
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Надеюсь это поможет Возьмите массив строк размером три. Держите все специальные символы в одной позиции, все числа в одной и буквы в одной как arr = {"01...9","!....@","a....z"} теперь проверьте каждый символ, если он находится в другой позиции в arr, затем увеличьте количество. Вы можете сохранить позицию предыдущего символа.

if(!arr[previousKey].contains(character))
{
    count++;
    change previousKey to position which contain the character
}
else
    continue;
Ответ принят как подходящий

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

Например:

String str = "215348-jobpoint";
System.out.println("Input: \"" + str + "\"");

// Replace chunks of digits with a single '0':
str = str.replaceAll("\\d+", "0");
System.out.println("After replacing digit chunks: \"" + str + "\"");

// Replace chunks of letters with a single 'A':
str = str.replaceAll("[A-Za-z]+", "A");
System.out.println("After replacing letter chunks: \"" + str + "\"");

// Replace chunks of non-digits and non-letters with a single '~':
str = str.replaceAll("[^A-Za-z\\d]+", "~");
System.out.println("After replacing non-digit/non-letter chunks: \"" + str + "\"");

// Since we transformed every chunk of subsequent characters of the same type to a single character,
// retrieving the length-1 will get our amount of type-changes
int amountOfTypeChunks = str.length();
int amountOfTypeChanges = amountOfTypeChunks -1;
System.out.println("Result (amount of chunks of different types): " + amountOfTypeChunks);
System.out.println("Result (amount of type changes): " + amountOfTypeChanges);

В результате чего:

Input: "215348-jobpoint"
After replacing digit chunks: "0-jobpoint"
After replacing letter chunks: "0-A"
After replacing non-digit/non-letter chunks: "0~A"
Result (amount of chunks of different types): 3
Result (amount of type changes): 2

Попробуйте онлайн.

Обратите внимание, что ваш пример ввода "215348-jobpoint" имеет два изменения типа: с 215348 на - и с - на jobpoint вместо трех указанных вами. Если вы независимо ищете вывод 3, поэтому ищете количество фрагментов типа вместо количества изменений типа, вы можете удалить -1 после str.length() (в этом случае ввод, подобный "abc", приведет к 1 вместо 0 ). Я добавил оба результата в приведенный выше код.

Кроме того, 0, A и ~, которые я использовал, могут быть любыми другими символами. Поскольку мы хотим знать только длину результирующей строки после замен, какой это символ, не имеет значения (хотя, конечно, не используйте букву в качестве замены цифр).

Другие вопросы по теме