Как использовать слово в строке в параметре, используя метод в Java? - PullRequest
0 голосов
/ 02 октября 2019

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

Мои инструкции читаются следующим образом:

Метод capitalizeMatches, который принимает два параметра: стог сена типа String и иглу типа String.

Возвращает строку, в которой большинствовхождения иглы в стоге сена заменяются заглавной версией иглы.

Например, capitalizeMatches («Дюйм за дюймом, жизнь - это подпруга. Двор за двором, жизнь трудна.», «Двор»)→ Дюйм за дюймом, жизнь становится проще. YARD by YARD, жизнь трудна.

Замените вхождения иглы, которые являются полностью строчными (ярд), и тех, чья первая буква только с большой буквы (ярд).

Разрешить игле появляться внутридругими словами (shipYARD).

В любом случае, где то, что я имею до сих пор. Ниже я объясняю свою проблему / ошибку. Помоги мне.

public static String capitalizeMatches(String haystack, String needle)
{
  String update = "";
  needle = needle.toUpperCase();
  String words[] = haystack.split(" ");

for(int i = 0; i < words.length(); i++)
{
  String word = words[i]; //Exception takes place somewhere here... 
  if(word.equalsIgnoreCase(needle))
  {
    word = word.toUpperCase();
  }
  update += word;
  update += " ";
}
return update;
}

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

Я получаю вывод, гдетолько он остается капиталом один раз. Мне нужно, чтобы он всегда был капиталом.

вывод: Дюйм за дюймом, жизнь не за горами. Двор за двором, жизнь тяжелая.

должно быть: Дюйм за дюймом, жизнь - это просто. Двор за двором, жизнь трудна.

Ответы [ 3 ]

1 голос
/ 02 октября 2019

Метод replaceAll использует Pattern class, чтобы использовать поиск по регулярному выражению для слова и заменить его другим словом.

Вы можете добавить префикс вашего слова вместо Pattern switch, чтобы игнорировать регистрпри поиске слова.

В строке также есть метод toUpperCase(), который будет полезен.

Вы сможете выполнить свою задачу с помощью одного оператора. Другими словами, все версии ярда или Ярда или ЯРда как часть слова или нет будут заменены на ЯРД. Если вы хотите заменить только целые слова, обратите внимание на границу слова в Pattern class.

1 голос
/ 02 октября 2019

В цикле for необходимо изменить условие. Не превышая длину символа haystack, а "количество слов" в words:

for(int i = 0; i < words.length; i++)
0 голосов
/ 02 октября 2019

Я благодарен @WJS за решение этого решения для меня. Я держал это очень простой и короткий. Решение

public static String capitalizeMatches(String haystack, String needle)
{
   return  haystack.replaceAll("(?i)" +needle, needle.toUpperCase());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...