2016-07-22 43 views
0

我正在处理一个项目,现在有用户输入一个RFID,它必须是一个固定长度为9个字符并以十六进制表示的字符串,因此每个字符都是0到9之间的数字或其中一个字母A到F.(不区分大小写)字符串中的Java正则表达式字符

然后我还需要输入固定在6个字符处的货架位置,第一个字符是's'来表示它是货架位置后面跟着一个5位数字。 EX:“s04013”(不区分大小写)

使用扫描仪将输入存储在变量RFID和originalLocation中。我有两个问题:

1)如何检查并确保输入有效,如果不是,可以抛出异常?我想我必须使用正则表达式,但我不确定。

2)有没有办法将字符串的长度固定为指定数量的字符?

任何帮助/建议将不胜感激 非常感谢你!

+0

你能提供将被匹配的一些示例字符串? – ngrj

回答

0

(S [0-9] {5} | [0-9A-F] {9})

该正则表达式应解决问题。

See DEMO here

String str = "s04013"; 
String regex = "(s[0-9]{5}|[0-9a-f]{9})"; 
if(str.matches(regex)) { 
    /*Do something*/ 
} else { 
    throw new Exception("Token does not matach"); 
} 
+0

谢谢你的帮助! –

+0

很高兴这个答案很有帮助。请考虑接受我的答案。 – ngrj

0

我不知道如果我正确地理解你的问题,但是这是我想出了什么,我从你的问题聚集。 代码:

import java.util.Scanner; 

public class RegexTry { 
    public static void main(String args[]){ 

    Scanner scanner = new Scanner(System.in); 
    String RFIDreg = "^[0-9A-Fa-f]{9}$"; 
    String Shelfreg = "^s[0-9]{5}$"; 

    System.out.print("Enter RFID: "); 
    String RFIDString = scanner.nextLine();//input RFID string 

    /*Check for RFID string*/ 
    if(RFIDString.matches(RFIDreg)){ 
     System.out.println("Correct"); 
    } 
    else{ 
     System.out.println("False"); 
    } 
    /*Check for RFID string*/ 

System.out.print("Enter Shelf Position: "); 
String Shelfstring = scanner.nextLine();//input Shelf string 

    /*Check for Shelf string*/ 
    if(Shelfstring.matches(Shelfreg)){ 
     System.out.println("Correct"); 
    } 
    else{ 
     System.out.println("False"); 
    } 
    /*Check for Shelf string*/ 
} 

}

+0

非常感谢您的帮助! –