Java считает строку массивом

258
14 ноября 2017, 23:08

Во всём коде где используется s который является строкой выводит ошибку

Array type expected; found: 'java.lang.String'

        Scanner scan = new Scanner(System.in);
        System.out.printf("Enter string ");
        String s = scan.nextLine();
        System.out.println(s);
        Integer n = s.length();
        for (int i = 1; i > n; i++){
            if ((s[i]='a')&&(s[i+1]='b')&&(s[i+2]='c')&&(s[i+3]='d')){
                for (int l = 0; l < 4; l++) {
                    for (int m = 0; m < n; m++) {
                        s[m] = s[m+1];
                    }
                    n = n-4;
                }
            }
        }
        for (int i = 0; i < n; i++) {
            System.out.println(s[i]);
        }

Я пытаюсь сделать вот это задание: Даны натуральное число n, символы S1,.....,Sn. Удалить из данной последовательности все группы букв вида abcd.

Answer 1

Можно использовать метод String.toCharArray() чтобы получить массив char из строки. Дальше итерировать по этому объекту и соединить его в новую строку. Но в данном случае я думаю лучше воспользоваться готовыми решениями вроде:

String str = "Hello abcd world abcd";
str = str.replace("abcd", "");
System.out.print(str); // "Hello  world " - пробелы сохранены

Либо написать регулярное выражение

В любом случае, такие решения лучше:
1. Они не создают оверхеда, т.к. нет циклов в т.ч. вложенных.
2. Они будут работать безотказно, в то время как в самопальном цикле можно закосячить и поломать что-нибудь.
3. Они лучше для чтения и понимания, нежели разбираться в странных циклах и слипшихся условиях :)

Answer 2

Вы не можете обратиться к конкретному символу в строке, используя s[i], так можно делать только с массивами. Чтобы получить символ нужен метод charAt, а для замены replace (однако он вернет новую строку ведь класс String неизменяемый, для изменения строки используйте stringBuilder или массив символов).

READ ALSO
Кириллица в именах файлов

Кириллица в именах файлов

ЗдравствуйтеУважаемые гуру, подскажите пожалуйста , вопрос в следующем :

283
Android 6: DataPicker изменяет свою внешность

Android 6: DataPicker изменяет свою внешность

Использую DatePickerDialog и настраиваю границы для даты:

239
Обход дерева с вызовом действий в узлах

Обход дерева с вызовом действий в узлах

У меня есть дерево, узлы которого имеют тип NodeВ зависимости от типа (одной из реализаций Node) узлы различаются набором информации, которая...

239
Шаблон-одиночка и многопоточность в Java

Шаблон-одиночка и многопоточность в Java

Существует клиент-серверное приложения, на серверной(мультипотоковой) части я пытаюсь реализовать синглтон:

237