要求用户输入遵循字符串格式

时间:2016-09-15 17:13:31

标签: java string

因为我正在学习java,所以我也很难做我希望我的程序做的事情。我正在看新星学习,然而,他教我一切,即如何格式化用户输入。

到目前为止,这是我的代码。

import java.util.Scanner;

public class FitnessExtreme {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println("Welcome to FitnessExtreme Centre");
    System.out.println("          XX      XX");
    System.out.println("           XX    XX");
    System.out.println("             XXXX");
    System.out.println("           XX    XX");
    System.out.println("          XX      XX");

    int membership = 299;
    double tax = 1.25;
    double total = membership*tax;

    // Scans for user input
    Scanner scan = new Scanner(System.in);

    // Retrieves customer name
    System.out.println("First name: ");
    String fname = scan.next();

    System.out.println("Last name: ");
    String lname = scan.next();

    // Retrieves CPR number
    System.out.println("CPR number: ");
    String cpr = scan.next();

    // Validate CPR format
    if(cpr.length() != 11) {
        System.out.println("Format was not met, please try again");
        System.out.println("CPR number: ");
        cpr = scan.next();
    }

    // Retrieves Telephone number
    System.out.println("Telephone number: ");
    String phone = scan.next();

    // Retrieves Address
    System.out.println("House number: ");
    String hnumber = scan.next();

    System.out.println("Street name: ");
    String sname = scan.next();

    System.out.println("Post code: ");
    String pcode = scan.next();     

    // Customer print out
    System.out.println("Thank you " + fname + " " + lname);
    System.out.println("I have registered following information on you: ");
    System.out.println("CPR number: " + cpr);
    System.out.println("Telephone number: " + phone);
    System.out.println("House number: " + hnumber);
    System.out.println("Street name: " + sname);
    System.out.println("Post code " + pcode);       

    // Continue?
    System.out.println("");
    System.out.println("If this information is correct and you want to continue, please enter 'yes'");
    String verify = scan.next();

    if(verify.equals("yes")) {
        System.out.println("Alright " + fname + " your price is gonna be:");
        System.out.println("Membership subscription - subtotal: " + membership);
        System.out.println("VAT " + tax);
        System.out.println("Total: " + total);
    }
  }
}

所以我需要格式化用户输入“cpr”,我需要采用###### - ####格式。我得到了长度部分,但是,如果用户不满足关于格式的要求,我想说它请再试一次,就像我用cpr做的那样。我在Google上找到了多种格式的指南,但我找不到按照我想要的方式进行格式化的指南。

谁比你们好!如果您有关于如何改进我的计划的提示,请分享。

3 个答案:

答案 0 :(得分:1)

对于初学者,我建议不是“最短”的解决方案,而是一个容易理解的解决方案。

你说你想要这种格式###### - ####;换句话说:6位数,短划线,4位数。

您可以为此构建一个支票:

  1. 你检查长度是11 ---很好你已经有了
  2. 您迭代输入字符串;并检查每个字符是否为数字。 [除了第7个字符 - 必须是“ - ”! ]
  3. 要检查字符是否为数字,您可以使用Character.isDigit()

    如果有效,您可以将该检查合并为一个正则表达式;并试验一下。

    但正如所说;初学者应该从手动完成这些事情开始。了解正在发生的事情;只有这样;继续前进,研究更强大,更复杂的解决方案。

答案 1 :(得分:1)

为您提供现在可以运行的解决方案。执行时,请注意它会告诉您有3个匹配项。您可以随意修改INPUT,以便了解有关正则表达式的更多信息

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
  private static final String REGEX = "\\d{5}-\\d{3}";
    private static final String INPUT = "12345-123 12345-123......... 55555-333";

    public static void main( String args[] ){
       Pattern p = Pattern.compile(REGEX);
       Matcher m = p.matcher(INPUT); // get a matcher object
       int count = 0;

       while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}

答案 2 :(得分:0)

自从我使用java语法以来已经有一段时间了,但是让我提供这个......

经过长度检查后,检查第7个字符是否确实是' - '。我相信大多数字符串都使用Mid()函数。

如果CPR编号始终是数字 - 数字,那么您还可以检查左侧6个字符是否为数字(我认为IsNumber或IsNumeric或IsInt应该可以正常工作)。并且右边4是一个数字。

我希望这会有所帮助。