#java #regex
#java #регулярное выражение
Вопрос:
Я пытаюсь разделить предложение на слова, а затем распечатать их, если они содержат только буквенные символы. Вместо этого другие символы должны выводить сообщение об ошибке.
Пример ввода:
Быстрая коричневая лиса
Желаемый результат:
The
быстро
Коричневый
фокс
Пример ввода:
Th1 qu1ck br0wn фокс
Желаемый результат:
Это недопустимо.
Я попытался сделать это, используя шаблон, но я думаю, что это не сработало.
import java.util.Scanner;
import java.util.regex.Pattern;
public class test {
public static void main(String[] args) {
System.out.println("This will break a sentence into words.");
Scanner alpha = new Scanner(System.in);
String beta = alpha.nextLine();
String [] data = beta.split(" ");
if (Pattern.matches("[a-zA-Z] ", beta)){
System.out.println(data[0]);
System.out.println(data[1]);
System.out.println(data[2]);
System.out.println(data[3]);
}
else {
System.out.println("This is not valid.");
}
}
}
Комментарии:
1. Не могли бы вы подробнее объяснить, что вы хотите, чтобы ваша программа выполняла? Также можете ли вы добавить выходные данные своей программы при ее запуске?
2. вы разбиваете свое предложение на слова (кстати, используйте
"\s "
вместо" "
этого), тогда все, что вам нужно сделать, это использовать ваше выражение против каждого слова3. Вы разделяете строку, но затем проверяете, состоит ли сама строка только из букв. Это будет недопустимо, если у вас есть пробелы или знаки препинания. Кроме того, недопустимо, если у вас есть неанглийские символы.
Ответ №1:
Ответ прост :). Вы пытались сопоставить свой шаблон со всей входной строкой «beta», но вы уже разделили «beta» и хотите сопоставить шаблон не с beta, а с одним элементом вашего массива «data».
Измените это:
if (Pattern.matches("[a-zA-Z] ", beta)){}
к этому:
for(String word : data)
{
Pattern.matches("[a-zA-Z] ", word)
}
Вы должны справиться с ситуацией, когда шаблон не совпадает, но это ваша работа. 🙂
Надеюсь, это поможет.
Комментарии:
1. на выходе выводится «Быстрая коричневая лиса» четыре раза: (
Ответ №2:
Еще один вариант с проверкой всей строки перед разбором слов:
private static boolean isValidSymbols(String s) {
return s != null amp;amp; s.matches("[a-zA-Z\s] ");
}
private static void checkInput(String s) {
if (isValidSymbols(s)) {
for (String word : s.split("\s ")) {
System.out.println(word);
}
} else {
System.out.println("This is not valid.");
}
}
public static void main(String[] args) {
checkInput("The quick brown fox");
checkInput("Th1 quick br0wn fox");
}
Ответ №3:
Если я понимаю вопрос, простой способ — проверить буквы с помощью ASCII-кода:
public class Test {
public static void main(String[] args) {
System.out.println("This will break a sentence into words.");
Scanner alpha = new Scanner(System.in);
String beta = alpha.nextLine();
int count = 0;
for (int i=0; i<beta.length(); i ) {
if (((int)beta.charAt(i) > 64 amp;amp; (int)beta.charAt(i) < 91) || ((int)beta.charAt(i) > 96 amp;amp; (int)beta.charAt(i) < 123) || ((int)beta.charAt(i) == 32)) {
count ;
}
}
if (count == beta.length()) {
System.out.println("correct");
} else {
System.out.println("incorrect");
}
}
}
Комментарии:
1. Как насчет неанглоязычных символов?
2. @Vld, я думаю, что он использует только английские символы, потому что в своем регулярном выражении он использует:
[a-zA-Z]
3. Это зависит от того, было ли это предназначено или нет. Обратите внимание, что OP — новичок (без неуважения), поэтому он может просто не знать о воздействии.
Ответ №4:
попробуйте это:
System.out.println("This will break a sentence into words.");
Scanner alpha = new Scanner(System.in);
String beta = alpha.nextLine();
String [] data = beta.split("\s ");
boolean valid = true;
for (String word: data)
if (!Pattern.matches("[a-zA-Z] ", word)){
valid = false
break;
}
if(valid)
System.out.println("This is valid.");
else
System.out.println("This is not valid.");
небольшие изменения, если ваше слово содержит больше стандартных 26 букв tnat
String beta = "Dieser Satz ist ungültig. This is valid";
String[] data = beta.split("[\s |\. ] ");
boolean valid = true;
a: for (String word : data)
for (char c : word.toCharArray())
if (!Character.isAlphabetic(c)) {
valid = false;
break a;
}
if(valid)
for (String word : data)
System.out.println(word);
else
System.out.println("This is not valid.");
Комментарии:
1.
This sentence is invalid.
Also, this one
из-за пунктуации иDieser Satz ist ungültig
(примечание: для последнего используется Google translate).2. вывод должен быть: быстрая коричневая лиса, но слова должны быть выше (не знаю термина) друг друга
Ответ №5:
Попробуйте следующий код:
String str = "This is a brown fox";
String patternStr= "[0-9]{1}";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(str);
if(matcher.find()){
System.out.println("invalid");
}else{
System.out.println("valid");
}
Спасибо,
JK
Комментарии:
1. Итак,
The qu!ck brown fox
допустимо?2. Почему
{1}
? Поскольку это регулярное выражение, почему бы просто не использовать шаблон »d
«?