【问题标题】:StringTokenizers for Java with regular expression带有正则表达式的 Java 的 StringTokenizers
【发布时间】:2015-04-13 20:41:28
【问题描述】:

我正在开展一个项目,该项目需要用户输入 7 个信息元素(一次全部输入,以逗号分隔)。如果输入了任何无效字段,则显示一条消息并要求用户再次输入该字段。如果所有的信息。输入正确。显示所有字段,每行一个带有标签的字段。到目前为止我得到了什么:

import java.util.Scanner;

public class Implementation 
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Please enter first name: ");
        String firstName = scanner.nextLine();
        System.out.println("Please enter last name: ");
        String lastName = scanner.nextLine();
        System.out.println("Please enter address: ");
        String address = scanner.nextLine();
        System.out.println("Please enter city: ");
        String city = scanner.nextLine();
        System.out.println("Please enter state: ");
        String state = scanner.nextLine();
        System.out.println("Please enter zipcode: ");
        String zip = scanner.nextLine();
        System.out.println("Please enter phone: ");
        String phone = scanner.nextLine();

        System.out.println("\nValidate Result:");

        if (!validateFirstName(firstName))
            System.out.println("Invalid first name");
        else if (!validateLastName(lastName))
            System.out.println("Invalid last name");
        else if (!validateAddress(address))
            System.out.println("Invalid address");
        else if (!valiadteCity(city))
            System.out.println("Invalid city");
        else if (!validateState(state))
            System.out.println("Invalid state");
        else if (!validateZip(zip))
            System.out.println("Invalid zipcode ");
        else if (!validatePhone(phone))
            System.out.println("Invalid phone");
        else
            System.out.println("Valid input. Thank you!");
    }
    public static boolean validateFirstName(String firstName)
    {
        return firstName.matches("[A-Z][a-zA-Z]*");
    }        
    public static boolean validateLastName(String lastName)
    {
        return lastName.matches("[a-zA-z]+(['-][a-zA-Z]+)*");
    }
    public static boolean validateAddress(String address)
    {
        return address.matches("\\d+\\s+([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)");
    }        
    public static boolean valiadteCity(String city)
    {
        return city.matches("([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)");
    }        
    public static boolean validateState(String state)
    {
        return state.matches("([a-zA-Z]+|[a-zA-Z]+\\s[a-zA-Z]+)");
    }        
    public static boolean validateZip(String zip)
    {
        return zip.matches("\\d{5}");
    }        
    public static boolean validatePhone(String phone)
    {
        return phone.matches("[1-9]\\d{2}-[1-9]\\d{2}-\\d{4}");
    }
}

我是 Java 新手,我真的不知道如何处理 StringTokenizers。上面的代码我使用了基本输入。但是,我为此写了一小部分,但不确定也不知道放在哪里。

System.out.println("Enter info. separated by comma: ");
String sentence = scanner.nextLine();

String[] tokens = sentence.split(",");
System.out.printf("Number of elements: %d%nThe tokens are:%n", tokens.length);

for (String token : tokens)
    System.out.println(token);

我想出了两个问题:

  1. 我不知道在哪里/如何在我的代码上执行StringTokenizers
  2. 如果信息输入正确,如何显示所有字段?

如果你能在我的代码上解释清楚就好了。因为我是新手,不太确定该怎么做。非常感谢!

【问题讨论】:

    标签: java regex stringtokenizer


    【解决方案1】:

    StringTokenizer 用于使用指定的分隔符将输入字符串拆分为标记。 对于此类任务,您知道元素的顺序并且对于每个元素都有预定义的验证,我宁愿避免使用循环。

    任务的主要思想是首先将输入字符串拆分为元素数组,然后进行验证。

    String input = scanner.nextLine();
    String[] elements = input.split(',');
    if (elements.length != 7) { 
        System.out.println("Invalid input string");
        System.exit(0);    
    }
    
    String firstName = elements[0];
    while (!validateFirstName(firstName)) {
        System.out.println("Please enter first name: ");
        firstName = scanner.nextLine();
    }
    
    String secondName = elements[1];
    while (!validateSecondName(secondName)) {
        System.out.println("Please enter second name: ");
        secondName = scanner.nextLine();
    }
    // ... The same logic for the other fields.
    

    【讨论】:

    • 非常感谢您的帮助!我明白了,但不太确定。让我尝试处理我的代码,然后让您知道是否发生任何事情。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    相关资源
    最近更新 更多