Задача такая:
Посчитать кол-во слов в строке
Удалить из строки все символы "a"
Удалите из строки каждый третий символ
Код решает 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;
}
}
Проблема в том, что вы удаляете символы, идя от начала строки и при этом применяя индексы (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() - нет необходимости для этого разбивать строку на массив символов.
Продвижение своими сайтами как стратегия роста и независимости