2011-04-22 152 views
0

我想寫一個函數validate()它將採取一些模式或正則表達式作爲參數,並會要求用戶輸入它的選擇。如果選擇符合模式,它將返回選擇,否則它會要求用戶重新輸入選擇。輸入模式匹配java

例如,如果我打電話validate()123作爲參數,它將返回要麼123取決於用戶輸入。

但我不知道如何使用模式或正則表達式。請幫忙。

我寫了一些代碼,但我不知道在幾個地方寫什麼。 我想要下面寫的驗證函數接受輸入1或2或3並返回相同。

import java.io.*; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
class Pat 
{ 
    public static void main(String args[]) 
    { 
    int num=validate(Pattern.compile("123"));//I don't know whether this is right or not 
    System.out.println(num); 
    } 
    static int validate(Pattern pattern) 
    { 
    int input; 
    boolean validInput=false; 
    do 
    { 
     try 
     { 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     input=Integer.parseInt(br.readLine()); 
     validInput=true; 
     }catch(Exception e) 
     { 
     System.out.println(""+e); 
     } 
    }while(!validInput || input.matches(pattern));// This also seems like a problem. 
    return input; 
    } 
} 
+0

您是否閱讀過文檔? – Oded 2011-04-22 18:58:18

+0

http://www.regular-expressions.info/java.html - 良好的指導 – nsfyn55 2011-04-22 18:59:27

+0

我已閱讀它。但我不知道如何實施它。 – 2011-04-22 19:01:32

回答

2

我想你的意思是輸入你的模式爲「[123]」。

你幾乎解決了它自己的隊友。 :)

另外我注意到有幾件事情你應該重新考慮。這是我編輯後的代碼。享受,希望它能做到你以後的樣子。

import java.io.*; 


class Pat 
{ 
    public static void main(String args[]) 
    { 
     int num = validate("[123]"); 
     System.out.println(num); 
    } 

    static int validate(String pattern) 
    { 
     String input = ""; 
     boolean validInput = false; 
     do 
     { 
      try 
      { 
       BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
       input = br.readLine(); 
       if(input.matches(pattern)) 
        validInput = true; 
      }catch(Exception e) 
      { 
       System.out.println("" + e); 
      } 
     }while(!validInput); 
     return Integer.parseInt(input); 
    } 
} 

Oi,Boro。

+0

非常感謝!它的作品完美! – 2011-04-22 20:45:05

+0

@powerpravin快樂我的所有:)我希望你瞭解所有的變化,爲什麼我做了他們。在[Java RegEx教程預定義字符類](http://download.oracle.com/javase/tutorial/essential/regex/pre_char_classes.html)中,您可以找到很多信息,這些信息可以幫助您更好地理解解決方案。 – Boro 2011-04-23 05:29:35

0

如果您不想使用模式匹配器,則可以檢查輸入是否爲選項字符串中的一個字符。

public class Main { 
public static void main(String[] args) { 
    String options = "123abc"; 
    System.out.println("You chose option: " + validate(options)); 
} 

static String validate(String options) 
{ 
    boolean validInput=false; 
    String input = ""; 
    do { 
     System.out.println("Enter one of the following: " + options); 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     try { 
      input = br.readLine(); 
      if (input.length() == 1 && options.indexOf(input) >= 0) { 
       validInput=true; 
      } 
     } catch (IOException ex) { 
      // bad input 
     } 
    } while(!validInput); 
    return input; 
} } 
+0

感謝您的回覆。但我希望這種方法能夠進行概括並使其不僅能接受單個字符,還能接受字符串。 – 2011-04-23 19:11:32