Я полностью застрял на том, куда идти с этой проблемой. Я пытаюсь взять слово из строки слов и заменить его словом из другой строки. Например, один из примеров, который мне подсказали, был:
//changeWords("Hi nice to meet you", "hi", "hello") returns ["hello", "nice", "to", "meet", "you"]
Вот что я пока напечатал:
public static String[] changeWords(String text, String find, String replace)
{
String[] words = new String[0];
words = text.split(" ");
if (words[0] == find) {
words[0].set(replace);
}
return words;
}
По общему признанию, мой код не слишком подробен и не далек от поиска решения, но я хотел бы получить некоторое руководство о том, куда двигаться из того, что у меня есть. Спасибо за помощь.
Вы ДОЛЖНЫ сравнивать объекты в Java, используя .equals()
, а не ==
.
Как сказал @D George, вам нужно выполнить цикл с помощью цикла и использовать метод .equals() для сравнения строк. Вы можете изменить свой код, чтобы он выглядел так... или используйте метод .replaceFirst() строкового объекта, чтобы заменить первое вхождение строки поиска. Попробуй это
public static String[] changeWords(String text, String find, String replace)
{
String[] words = new String[0];
words = text.split(" ");
for(int i = 0; i < words.length; i++){
if (words[i].equalsIgnoreCase(find)) {
words[i]=replace;
break;
}
}
return words;
}
ИЛИ ЭТО
public static String[] changeWords(String text, String find, String replace)
{
return text.replaceFirst(find, replace);
}
Описанный выше подход хорошо подходит в ситуации, когда вы хотите заменить только первое вхождение строки поиска. если вы хотите заменить все вхождения строки поиска, вам не нужно использовать массив, поскольку строковый объект поставляется с методом замены. вы можете сделать это, чтобы заменить все вхождения:
public static String[] changeWords(String text, String find, String replace)
{
return text.replace(find, replace);
}
Вы на правильном пути, но теперь моя программа заменяет только первый экземпляр каждого слова и, как указал Арвинд Кумар Авинаш, не учитывает примеры без учета регистра. Пример, который я разместил, в настоящее время возвращает «Привет, приятно познакомиться». Помощник, с которым я консультируюсь, сказал мне, что размер слов в массиве является частью проблемы.
вы можете использовать метод .equalsIgnoreCase(), чтобы найти совпадение без учета регистра.
Большое спасибо. Я немного посоветовался с другим студентом, чтобы помочь закончить код, но то, что вы предложили, очень помогло в его решении!
Вместо того, чтобы проверять слово в 0-й позиции, выполните цикл по массиву строк и сравните каждое слово. Как только совпадение найдено, замените слово с помощью words[i] = replace и прервите цикл.