import java.util.Scanner;
class MyProgram {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int numberOfLines = scan.nextInt();
scan.nextLine();
String[] lines = new String[numberOfLines];
for (int i = 0; i < numberOfLines; i++) {
lines[i] = scan.nextLine();
}
int numberOfAllergens = scan.nextInt();
scan.nextLine();
String[] allergensAndReplaced = new String[numberOfAllergens];
for (int i = 0; i < numberOfAllergens; i++) {
allergensAndReplaced[i] = scan.nextLine();
String[] replace = allergensAndReplaced[i].split(" - ");
String allergen = replace[0];
String replacement = replace[1];
for (int j = 0; j < numberOfLines; j++) {
lines[j] = replaceWordsWithMatchingCase(lines[j], allergen, replacement);
}
}
for (int i = 0; i < numberOfLines; i++) {
System.out.println(lines[i]);
}
}
private static String replaceWordsWithMatchingCase(String line, String target, String replacement) {
StringBuilder result = new StringBuilder();
int currentIndex = 0;
while (currentIndex < line.length()) {
int startIndex = line.indexOf(target, currentIndex);
if (startIndex == -1) {
result.append(line.substring(currentIndex));
break;
}
result.append(line.substring(currentIndex, startIndex));
if (startIndex > 0 && Character.isUpperCase(line.charAt(startIndex))) {
replacement = capitalizeFirstLetter(replacement);
}
result.append(replacement);
currentIndex = startIndex + target.length();
}
return result.toString();
}
private static String capitalizeFirstLetter(String word) {
return Character.toUpperCase(word.charAt(0)) + word.substring(1);
}
}
В данном коде функция replaceWordsWithMatchingCase осуществляет замену слов с сохранением регистра, а функция capitalizeFirstLetter делает первую букву слова заглавной. Это позволит заменить аллергены на указанные продукты, сохраняя регистр. for(int i = 0; i < numberOfAllergens; i++){
allergensAndReplaced[i] = scan.nextLine();
String[] replace = allergensAndReplaced[i].split(" - ");
for(int j = 0; j < numberOfLines; j++){
if (lines[j].toLowerCase().contains(replace[0])) {
lines[j] = lines[j].replaceAll("(?i)" + replace[0], Character.isUpperCase(lines[j].charAt(lines[j].toLowerCase().indexOf(replace[0]))) ? capitalize(replace[1]) : replace[1]);
}
}
}
Здесь я добавил еще одну функцию capitalize, которую вы можете использовать для преобразования первой буквы строки в верхний регистр: public static String capitalize(String str) {
if(str == null || str.isEmpty()) {
return str;
}
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
Эта функция capitalize преобразует первую букву строки в верхний регистр и оставляет остальные символы без изменений.
Сама задача: Входные данные: Выходные данные: Пример ввода: Пример вывода: У меня получилось заменить продукты, но только с нижним регистром. Я пару часов просидел, но так и не придумал.
Это код, который у меня получился: Помогите дорешать эту задачу. Заранее спасибо.
P.s. троллей буду банить)