#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;
}
Во-первых, входная строка должна быть разделена на слова. И вы должны выполнить операцию на основе команды.
Я сделал здесь несколько предположений, поскольку это не было упомянуто:
- Входные данные для операции добавления содержат слово, за которым следует его индекс в выходных данных.
- в операции замены заменяется только одно слово, и слово, подлежащее замене, находится с индексом 0.
Комментарии:
1. Спасибо. Ваше предложение помогло решить примеры, о которых я упоминал, но другой тестовый пример, который мне дали, не был полностью обработан. Вот проблемный код: « //editString(«Это всего лишь рана плоти», «заменить», [«плоть», «царапина», «рана», «пометка»]) возвращает [«Это», «но», «а», «царапина»,»пометить»] « Хотя он должен возвращать «Это всего лишь царапина», вместо этого он выдает «Это всего лишь царапина». Есть ли у вас какие-либо предложения о том, как заставить эту линию работать? Я полагаю, что проблема заключается в том, что код, который вы мне дали, используется только в первом случае, прежде чем переходить к другому.
2. Я обновил условие замены. Надеюсь, это поможет