2016-07-22 41 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

非常感謝您的幫助! –