Убрать каждый третий символ строки

553
24 декабря 2016, 16:11

Задача такая:

  1. Посчитать кол-во слов в строке

  2. Удалить из строки все символы "a"

  3. Удалите из строки каждый третий символ

Код решает 2 условия. Это максимум до чего я дошел, но программка ругается.
Как реализовать третий пункт?

public static void main(String[] args) {
    /*1*/
    Scanner in = new Scanner(System.in);
    String a = in.nextLine();
    int c = a.split(" ").length;
    System.out.println("слов в строке : " + c);
    /*2*/
    String b = a.replaceAll("a", "");
    System.out.println("cтрока без a : " + b);
    /*3*/
    int i = 3;
    int j;
    StringBuffer sb = new StringBuffer(a);
    int d = a.split("").length;
    System.out.println(d);
    d = d + 1;
    while (i <= d) {
      StringBuffer g = sb.deleteCharAt(i);
       System.out.println(g);
       i = i + 3;
   }
}
Answer 1

Проблема в том, что вы удаляете символы, идя от начала строки и при этом применяя индексы (3, 6, 9 и т.д.) и длину оригинальной строки к уже изменённой, у которой и длина уменьшается с каждой итерацией (что и приводит к исключению), и индексы символов, которые нужно удалить, уже другие.

Можно либо учитывать длину изменяемого sb и использовать соответствующие индексы:

for (int i = 2; i < sb.length(); i += 2)
{
    sb = sb.deleteCharAt(i);
}
System.out.println(sb);

Либо идти с конца строки:

StringBuffer sb = new StringBuffer(a);
int i = a.length() - a.length() % 3 - 1;
for (; i > 0; i -= 3)
{
    sb = sb.deleteCharAt(i);
}
System.out.println(sb);

В обоих случаях для исходной строки 1234567890 результатом будет 1245780, а для 123456 - 1245.

Длину строки можно получить с помощью метода .length() - нет необходимости для этого разбивать строку на массив символов.

READ ALSO
Как обозначить конец массива? [требует правки]

Как обозначить конец массива? [требует правки]

Не знаю как заставить сложить все элементы массива 1 разПодскажите каким оператором обозначить конец массива?

411
GWT права пользователей

GWT права пользователей

Добрый деньСледующая проблема

417
java.lang.NumberFormatException

java.lang.NumberFormatException

Подскажите как перевести String в массив int, чтобы не выдавало ошибку:

461
Переход между activity

Переход между activity

Есть код 2 активити, они одинаковы с 1, но в первом spinner, а во втором ListView, так вот в первом у меня парсит 1 Json в spinner, мне надо, чтобы при нажатие...

446