2014-02-10 89 views
0

「XXX-L格式的員工標識號(字符串),其中每個X是0-9範圍內的數字,L是範圍'A' - 'M'中的字母(小寫和大寫字母是可以接受的)「Java更好的方式來編碼這個簡單的參數攝入量?

上面是一個字段,它是構造函數的參數。現在,我計劃確保字符串的前3個字母是0-9之間的數字,然後確保索引4中有短劃線,然後確保AM之間有一個字母在第五個索引中,全部使用if else語句。有沒有更好的方法來做到這一點,比如輸入參數不必如此精確,程序能夠自行修復?謝謝。

我編寫,並嘗試正則表達式表達工具:

import java.util.regex.*; 

public class Employee { 

private String eName; 
private String IDNumber; 

public Employee(String name, String number) { 
    String regex = "[0-9][0-9][0-9][\\-][a-mA-M]"; 
    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher = pattern.matcher(number); 
    this.eName = name; 
    if(matcher.matches()) { 
    this.IDNumber = number; 
    } else{ 
     this.IDNumber = "999-M"; 
    } 

} 

public String getNumber() { 
    System.out.println(IDNumber); 
    return IDNumber; 
} 

public static void main(String[] args) { 
    Employee e = new Employee("John", "123-f"); 
    e.getNumber(); 
    Employee c = new Employee("Jane","25z"); 
    c.getNumber(); 
} 

} 

我還沒有徹底的測試,但它的工作原理,但看着別人的正則表達式的表情,雷似乎很newbish。我想知道是否有人可以幫助我構建一個更短或更好的正則表達式。

+0

不要簡單地問了代碼,顯示你的努力 – Baby

+2

如果有做的更好的辦法你只能問如果你事先做了一些事情......我沒有看到任何代碼,所以我認爲你沒有做任何事情。在這種情況下,首先嚐試一下。 –

+1

如果你知道'regex',你可以在沒有多個if語句的情況下進行驗證。 –

回答

1
^\\d{3}-[a-mA-M]$ 

這應該是我認爲的改進。

  1. ^意味着只要文本
  2. \d的開始指任何數字(反斜槓本身需要被轉義)
  3. {3}意味着以前的匹配的3倍
  4. 連字符是一個literal,因爲它不在方括號內
  5. [a-mA-M]表示您知道的任何大寫或小寫字母
  6. $意味着文本

結束時,我用這個網站來測試它的regexpal.com

+0

非常感謝,我真的很感謝 – Abdul

+0

它說無效的轉義序列,當我把它放在日食中時,但是無論如何感謝 – Abdul

+1

這將是java特有的東西,你可以逃脫就像你以前做過的一樣。但是它不需要放在方括號中,因爲它可以匹配一系列字符。 –

相關問題