2017-01-24 3 views
0

Я пытаюсь создать новую строку, вставив «-» между смежными числами в строке, например, если строка ввода «bea345ful», строка вывода должна быть как « bea3-4-5ful ", но если строка ввода« be3u4t5ful », мне не нужно вставлять« - », поскольку ни одна из цифр не смежна.Java - вставка «-» между смежными цифрами в строке

Я могу заставить его работать со следующим кодом, но он терпит неудачу, когда в конце строки есть непрерывные цифры, например. «be3u4t5f67» в этом случае он выдает StringIndexOutOfBoundsException, которое, как я понимаю, происходит, потому что мой код не обрабатывает это условие. Любые предложения по его устранению?

public static String insertDash(String str){ 
    String result = ""; 
    for (int i = 0; i < str.length(); i ++) { 
     if (Character.isDigit(str.charAt(i)) && Character.isDigit(str.charAt(i + 1))) { 
       result+=str.charAt(i) + "-"; 
      } else { 
       result+=str.charAt(i); 
      } 
    } return result; 

ответ

3

Условие остановки вашей петли должно быть i < str.length() - 1.

без изменения, на последней итерации, i равно str.length() - 1 и, следовательно, доступ к элементу по индексу str.length() - 1 + 1str.charAt(i + 1)) вызывает исключение.

После цикла for просто добавьте последний символ к result.

+0

Я уже пробовал это, и если я остановлюсь на str.length() - 1, тогда код не вставляет «-» между двумя последними цифрами, например, в «be3u4t5f67» он не будет выводить ожидаемый результат, be3u4t5f6-7 ", потому что он остановился на« 6 »и после него не нашел следующую цифру (что равно« 7 ») – codingdojo

+0

Он находит это из-за этого условия:' Character.isDigit (str.charAt (i)) && Character.isDigit (str.charAt (i + 1)) '. Попробуйте отладки, чтобы увидеть, что еще не так, потому что это должно действительно исправить :) –

+0

Рассмотрим случай, когда строка «bedu4tdf67k», в этом случае программа перестанет обрабатывать строку после «7» (согласно i codingdojo

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