(привет-> h3o) Как заменить в строке средние буквы для количества замененных букв - PullRequest
1 голос
/ 15 октября 2019

Мне нужно создать метод, который получает строку, например: «Поездки на слонах - это действительно весело!». и вернуть другую похожую строку, в этом примере возвращаемое значение должно быть: «e6t-r3s - это весело!». (поскольку e-lephan-t имеет 6 средних букв, r-ide-s имеет 3 средних буквы и т. д.)

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

на данный момент я пытался использовать регулярное выражение для разбиения полученной строки на слова и сохранения этих слов вмассив строк также у меня есть другой массив int, в котором я сохраняю количество средних букв, но я не знаю, как объединить массивы и символы в правильную строку, чтобы получить

    String string="elephant-rides are really fun!";
String[] parts = string.split("[^a-zA-Z]");
int[] sizes = new int[parts.length];
int index=0;

for(String aux: parts)
{

    sizes[index]= aux.length()-2;
    System.out.println( sizes[index]);
    index++;

}

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Вы можете использовать

String text = "elephant-rides are really fun!";
Pattern r = Pattern.compile("(?U)(\\w)(\\w{2,})(\\w)");
Matcher m = r.matcher(text);
StringBuffer sb = new StringBuffer();
while (m.find()) {
    m.appendReplacement(sb, m.group(1) + m.group(2).length() + m.group(3));
}
m.appendTail(sb); // append the rest of the contents
System.out.println(sb);
// => e6t-r3s are r4y fun!

См. Демонстрационную версию Java

Здесь (?U)(\\w)(\\w{2,})(\\w) соответствует любому слову в кодировке Unicode, записывающему его в группу 1, а затем записывает любое2 или более слов в Group 2, а затем захватывает одно слово char в Group 3, а внутри метода .appendReplacement содержимое второй группы «преобразуется» в его длину.

Java 9+ :

String text = "elephant-rides are really fun!";
Pattern r = Pattern.compile("(?U)(\\w)(\\w{2,})(\\w)");
Matcher m = r.matcher(text);
String result = m.replaceAll(x -> x.group(1) + x.group(2).length() + x.group(3));
System.out.println( result );
// => e6t-r3s are r4y fun!
0 голосов
/ 15 октября 2019

Для инструкций, которые вы дали нам, этого будет достаточно:

String [] result = string.split("[\\s-]");
for (int i=0; i<result.length; i++){
    result[i] = "" + result[i].charAt(0) + ((result[i].length())-2) + result[i].charAt(result[i].length()-1);
}

С вашим вводом он создает массив [ "e6t", "r3s", "a1e", "r4y", "f2!" ]

И он работает даже с одним или двумя размерамислова, но это дает результат, такой как:

Ввод: I am a small;Вывод: [ "I-1I", "a0m", "a-1a", "s3l" ]

Опять же, для инструкций, которые вы дали нам, это было бы законно.

Надеюсь, я помог!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...