如何制作仅匹配字母字符的正则表达式?

时间:2014-06-20 11:33:36

标签: java regex

我试图将一个句子分成单词,然后如果它们只包含字母字符则打印它们。其他字符应输出错误消息。

示例输入:

  

快速的棕色狐狸

结果输出:

  

     

快速

     

褐色

     

示例输入:

  

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 个答案:

答案 0 :(得分:2)

答案很简单:)。 你试图将你的模式与整个inputString" beta"相匹配,但是你分裂了" beta"已经和你想要匹配的模式不是beta,而是匹配数组的一个元素" data"。

改变这个:

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

到此:

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

你必须处理模式不匹配的情况,但这就是你的工作。 :) 我希望它有所帮助。

答案 1 :(得分:0)

请尝试以下代码:

    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

答案 2 :(得分:0)

试试这个:

   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个字母

,则进行小调整
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.");

答案 3 :(得分:0)

在解析单词之前检查整行的另一个选项:

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

答案 4 :(得分:0)

如果我理解一个问题,那么简单的方法是用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");
        }
    }
}