Я пытаюсь разбить предложение на слова, а затем распечатать их, если они содержат только альфа-символы. Вместо этого другие символы должны выводить сообщение об ошибке.
Пример ввода:
Быстрая коричневая лиса
Желаемый результат:
В
быстрый
коричневый
лиса
Пример ввода:
Th1 qu1ck br0wn fox
Желаемый результат:
Это неверно.
Я пытался сделать это по шаблону, но, думаю, не получилось.
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.");
}
}
}
5 ответов
Ответ прост :). Вы пытались сопоставить свой шаблон со всей inputString «beta», но вы уже разделили «beta», и вы хотите сопоставить шаблон не с beta, а с одним элементом вашего массива «data».
Измените это:
if (Pattern.matches("[a-zA-Z]+", beta)){}
К этому:
for(String word : data)
{
Pattern.matches("[a-zA-Z]+", word)
}
Вы должны справиться с ситуацией, когда шаблон не совпадает, но это ваша работа. :) Я надеюсь, что это помогает.
Попробуйте следующий код:
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
The qu!ck brown fox
действителен?
{1}
? Поскольку это регулярное выражение, почему бы просто не использовать шаблон "\d
"?
Еще один вариант с проверкой всей строки перед парсингом слов:
private static boolean isValidSymbols(String s) {
return s != null && 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");
}
Если я понимаю вопрос, самый простой способ - проверить буквы с кодом 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 && (int)beta.charAt(i) < 91) || ((int)beta.charAt(i) > 96 && (int)beta.charAt(i) < 123) || ((int)beta.charAt(i) == 32)) {
count++;
}
}
if (count == beta.length()) {
System.out.println("correct");
} else {
System.out.println("incorrect");
}
}
}
[a-zA-Z]
Попробуй это:
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.");
Небольшие настройки, если ваше слово содержит больше стандартов tnat 26 букв
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.");
This sentence is invalid.
Also, this one
из-за пунктуации и Dieser Satz ist ungültig
(примечание: для последнего использовался Google переводчик).
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
"\\s+"
вместо" "
), тогда все, что вам нужно сделать, это использовать свое выражение против каждого слова