Я пытаюсь разбить предложение на слова, а затем распечатать их, если они содержат только альфа-символы. Вместо этого другие символы должны выводить сообщение об ошибке.

Пример ввода:

Быстрая коричневая лиса

Желаемый результат:

В

быстрый

коричневый

лиса

Пример ввода:

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.");
        }
    }

}
0
user3736846 20 Июн 2014 в 15:33

5 ответов

Лучший ответ

Ответ прост :). Вы пытались сопоставить свой шаблон со всей inputString «beta», но вы уже разделили «beta», и вы хотите сопоставить шаблон не с beta, а с одним элементом вашего массива «data».

Измените это:

if (Pattern.matches("[a-zA-Z]+", beta)){}

К этому:

for(String word : data)
{
  Pattern.matches("[a-zA-Z]+", word)
}

Вы должны справиться с ситуацией, когда шаблон не совпадает, но это ваша работа. :) Я надеюсь, что это помогает.

2
VLAZ 20 Июн 2014 в 11:57

Попробуйте следующий код:

    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

0
HJK 20 Июн 2014 в 11:45

Еще один вариант с проверкой всей строки перед парсингом слов:

 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");
 }
0
udalmik 20 Июн 2014 в 11:50

Если я понимаю вопрос, самый простой способ - проверить буквы с кодом 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");
        }
    }
}
0
BSeitkazin 20 Июн 2014 в 11:51

Попробуй это:

   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.");
0
user902383 20 Июн 2014 в 11:59