Метод editString принимает строку и разбивает ее на массив отдельных слов, которые затем редактируются на основе команды

#string #arraylist #replace #add

#строка #arraylist #заменить #Добавить

Вопрос:

Эта программа использует три строки для изменения содержимого первой. Первая строка составляет предложение, которое необходимо изменить, вторая дает указание о том, что делать с первой строкой (удалить, заменить или добавить), и, наконец, третья строка, список массива, отображает, что следует изменить в первой строке.

Это три примера, которые мне предоставили для обеспечения работы моей программы:

 editString("What is up bro", "remove", ["bro"]) returns ["What", "is", "up"]
editString("What is up bro", "replace", ["bro", "brother"]) returns ["What", "is", "up", "brother"]
editString("What is up", "add", ["my", "3", "friend", "4"]) returns ["What", "is", "up", "my", "friend"]
 

Это код, который я придумал до сих пор. Хотя это немного, я чувствую, что, по крайней мере, у меня есть хорошее представление о том, куда двигаться с этой программой.

 public static ArrayList<String> editString(String text, String command, ArrayList<String> words)
    {
        ArrayList<String> edited = new ArrayList<String>();
        if (command.equals('remove')) {
            text.set(words);
        }
        if (command.equals('replace')) {
            text.set(words);
        }
        if (command.equals('add')) {
            words[i] = replace;
        }
      return edited;
    }
 

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

Ответ №1:

 public static ArrayList<String> editString(String text, String command, ArrayList<String> words)
    {
        String[] array = text.split("\s ");
        ArrayList<String> edited = new ArrayList<String>();
        if (command.equals("remove")) {
            for(String word : array) {
                if(!words.contains(word)) {
                    edited.add(word);
                }
            }
        }

        if (command.equals("replace")) {
            for(String word : array) {
                if(words.contains(word)) {
                    int index = words.indexOf(word);
                    edited.add(words.get(index   1));
                } else {
                    edited.add(word);
                }
            }
        }

        if (command.equals("add")) {
            for(String word : array) {
                edited.add(word);
            }
            int i = 1;
            while(i < words.size()) {
                edited.add(Integer.parseInt(words.get(i)), words.get(i - 1));
                i  = 2;
            }
        }
        return edited;
    }
 

Во-первых, входная строка должна быть разделена на слова. И вы должны выполнить операцию на основе команды.
Я сделал здесь несколько предположений, поскольку это не было упомянуто:

  1. Входные данные для операции добавления содержат слово, за которым следует его индекс в выходных данных.
  2. в операции замены заменяется только одно слово, и слово, подлежащее замене, находится с индексом 0.

Комментарии:

1. Спасибо. Ваше предложение помогло решить примеры, о которых я упоминал, но другой тестовый пример, который мне дали, не был полностью обработан. Вот проблемный код: « //editString(«Это всего лишь рана плоти», «заменить», [«плоть», «царапина», «рана», «пометка»]) возвращает [«Это», «но», «а», «царапина»,»пометить»] « Хотя он должен возвращать «Это всего лишь царапина», вместо этого он выдает «Это всего лишь царапина». Есть ли у вас какие-либо предложения о том, как заставить эту линию работать? Я полагаю, что проблема заключается в том, что код, который вы мне дали, используется только в первом случае, прежде чем переходить к другому.

2. Я обновил условие замены. Надеюсь, это поможет