#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