замените символы, один ввод нескольких слов

#java #string #replaceall

Вопрос:

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

ввод: сломай Роберта, да

выход: br**k

вот код

 public class Solution {

    public static void main(String[] args) {
        String enterWord;
        Scanner scan = new Scanner (System.in);
        enterWord = scan.nextLine();
        enterWord = enterWord.replaceAll("[aeiou]", "*");
        
    System.out.println(enterWord);
    }
}
 

есть ли какой-нибудь способ прочитать все три слова?

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

1. Является ли вход однострочным? находятся break robert yeah в одной и той же строке ввода? Если да, то ваш код работает br**k r*b*rt y**h в моей среде. Если нет, то поместите 3 строки scan.nextLine(); внутри цикла.

Ответ №1:

Ваш код работает так, как вы хотите (in:break robert yeah out: br**k r*b*rt y**h) в моем env(Windows10, java1.8.0_271), возможно, вы можете установить точку останова enterWord = enterWord.replaceAll("[aeiou]", "*"); и проверить enterWord , получена ли вся входная строка.

Ответ №2:

Вам нужен цикл, чтобы продолжать получать и обрабатывать входные данные. Кроме того, я предлагаю вам использовать (?i) регулярное выражение, чтобы сделать его нечувствительным к регистру.

 import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String enterWord, answer = "y";
        Scanner scan = new Scanner(System.in);
        do {
            System.out.print("Enter a word: ");
            enterWord = scan.nextLine();
            enterWord = enterWord.replaceAll("(?i)[aeiou]", "*");
            System.out.println("After replacing vowels with * it becomes "   enterWord);
            System.out.print("Do you wish to conntinue[y/n]: ");
            answer = scan.nextLine();
        } while (answer.equalsIgnoreCase("y"));
    }
}
 

Пробный прогон:

 Enter a word: hello
After replacing vowels with * it becomes h*ll*
Do you wish to conntinue[y/n]: y
Enter a word: India
After replacing vowels with * it becomes *nd**
Do you wish to conntinue[y/n]: n
 

Для одной строки, охватывающей несколько строк, метод String#replaceAll работает для всей строки, как показано ниже:

 public class Main {
    public static void main(String[] args) {
        String str = "breakn"   
                    "robertn"   
                    "yeah";
        System.out.println(str.replaceAll("(?i)[aeiou]", "*"));
    }
}
 

Выход:

 br**k
r*b*rt
y**h
 

Используя эту функцию, вы можете интерактивно построить строку из нескольких строк и, наконец, изменить все гласные на * .

ДЕМОНСТРАЦИЯ:

 import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String text = "";
        Scanner scan = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        System.out.println("Keep enter some text (Press Enter without any text to stop): ");
        while (true) {
            text = scan.nextLine();
            if (text.length() > 0) {
                sb.append(text).append(System.lineSeparator());
            } else {
                break;
            }
        }

        System.out.println("Your input: n"   sb);
        String str = sb.toString().replaceAll("(?i)[aeiou]", "*");
        System.out.println("After converting each vowel to *, your input becomes: n"   str);
    }
}
 

Пробный прогон:

 Keep enter some text (Press Enter without any text to stop): 
break
robert
yeah

Your input: 
break
robert
yeah

After converting each vowel to *, your input becomes: 
br**k
r*b*rt
y**h