问题是这样的:现在的有一个字符串,以逗号分割的2位或者1 位数字
例如:
values="1,12,16,56"输入一个1 到2 位的数字字符,判断是否在存在于上面的字符中
只有 1 12 16 56 这4个数字符合条件,其它的都不符合。怎样写这样的一个正则表达式?

解决方案 »

  1.   

    不明白lz的意思?
    你是说values里有一些1-2位的数字,
    输入的时候必须是values里面数字么?这个有必要用正则表达式么?
      

  2.   

    你这里似乎用不上正则,你这是要精准匹配,比如12这样的数字,唯一区分它和13的办法就是不用正则
    你可以用String.split(",")把你的字符串劈开得到一个字符串数组,再看输入的数字是否在这个数组里面就可以了。
      

  3.   

    你还不如直接这样
     if(value.indexOf(you) != -1)
       System.out.println(包含);
      

  4.   

    String[] ss=values.split(",");
    这样就得到了用逗号分隔的字符串数组了
      

  5.   

    程序可以这样写:
    import java.util.*;import javax.swing.JOptionPane;public class CompareString{
      public static void main(String args[]){
        Set set = new HashSet();
        //你给的值
        String value = "1,12,16,56";
        StringTokenizer st = new StringTokenizer(value,",");
        while(st.hasMoreTokens()){
           set.add(st.nextToken());
        }
        String s = JOptionPane.showInputDialog(null,"请输入一个一位或二位的数字");
        
        Iterator iterator = set.iterator();
        boolean d = false;
        while(iterator.hasNext()){
            if(iterator.next().equals(s)){
             d = true;
             JOptionPane.showMessageDialog(null, "该数字已在value中");
            }
        }
        if(d==false){
         JOptionPane.showMessageDialog(null, "该数字不在value中");
        }
     }
    }
      

  6.   

    String values="1,12,16,56";
    System.out.println(values.matches(".*\\b1\\b.*"));
    System.out.println(values.matches(".*\\b12\\b.*"));
    System.out.println(values.matches(".*\\b2\\b.*"));
    System.out.println(values.matches(".*\\b16\\b.*"));
    System.out.println(values.matches(".*\\b56\\b.*"));
    System.out.println(values.matches(".*\\b42\\b.*"));log4j:WARN No appenders could be found for logger (org.apache.struts.util.PropertyMessageResources).
    log4j:WARN Please initialize the log4j system properly.
    true
    true
    false
    true
    true
    false
      

  7.   

    str.indexof(","+inputStr)!=-1 || str.indexof(inputStr+",")!=-1
      

  8.   

    程序可以这样写: 
    import java.util.*; import javax.swing.JOptionPane; public class CompareString{ 
      public static void main(String args[]){ 
        Set set = new HashSet(); 
        //你给的值 
        String value = "1,12,16,56"; 
        StringTokenizer st = new StringTokenizer(value,","); 
        while(st.hasMoreTokens()){ 
           set.add(st.nextToken()); 
        } 
        String s = JOptionPane.showInputDialog(null,"请输入一个一位或二位的数字"); 
         
        Iterator iterator = set.iterator(); 
        boolean d = false; 
        while(iterator.hasNext()){ 
            if(iterator.next().equals(s)){ 
             d = true; 
             JOptionPane.showMessageDialog(null, "该数字已在value中"); 
            } 
        } 
        if(d==false){ 
         JOptionPane.showMessageDialog(null, "该数字不在value中"); 
        } 
     } 
    }
      

  9.   

    这个问题不用正则表达式吧? 同意3楼的. 用swich 也可以.
      

  10.   

    这个不涉及正规表达式就能弄了啊把输入作为字符串,标本字符串中split,如果返回的数组元素大于1,合法了为了安全起见,你可以在split前判断下是不是数字,并在标本的字符串开始和结尾各自加上若干非数字字符
      

  11.   

    刚开始,我也是想用数据放到数组或者 
    Hashtable,然后再循环判断,或者 Hashtable 
    的containsKey 方法实现,
    因为这个已经是两重循环里面的了,再循环
    效率就更低了。于是多找了一些规律,写了一个方法实现了,
    不用循环,一次搞定,多了几个判断,
    感觉用正则也许可以实现,可能比较麻烦,
    谢谢大家积极参与,参与都会有分的。过两天结贴。public class CheckIn { /**
     * @param args
     */
    public static void main(String[] args) { String type_id ="1,2,9,13,17,14,56";
    System.out.println("return1="+CheckIn.isIn(type_id,"1"));
    System.out.println("return2="+CheckIn.isIn(type_id,"2"));
    System.out.println("return3="+CheckIn.isIn(type_id,"3"));

    System.out.println("return4="+CheckIn.isIn(type_id,"4"));
    System.out.println("return13="+CheckIn.isIn(type_id,"13"));
    System.out.println("return5="+CheckIn.isIn(type_id,"5"));
    System.out.println("return6="+CheckIn.isIn(type_id,"6"));

    System.out.println("return11 1="+CheckIn.isIn("11","1"));
    System.out.println("return1 11="+CheckIn.isIn("1","11"));
    System.out.println("return55 58="+CheckIn.isIn("55,58","4"));

    }
    /**
     * 判断 str 是否包括 input
     * str 是以逗号分割的字符串,包括没有重复的从 0-99 中的一些数字,
     * 数字按从小到大的顺序排列
     * 
     * input 是一位或者两位的数字字符串
     */ 

    public static boolean isIn(String str,String input)
    {
    //str 为空,没有包括input,直接返回false
    if("".equals(str)) return false;
    if(str.indexOf(input)==-1) return false;

    //输入是一位数字
    /**
     * 如果str 没有逗号 只需要判断str 和input 是否相等
     * str 包括 input
     *    分三种情况
     *      位置在首位,后面是逗号,才算满足条件
     *      位置在中间,前后都是逗号,才算满足条件
     *      位置在最后,前面是逗号,才算满足条件
     */

    if(input.length()==1)
    {
    if(str.indexOf(",")>-1)
    {

    if(str.indexOf(input)==0)
    {
    return str.substring(1,2).equals(",");
    }
    else if(str.indexOf(input)==str.length()-1)
    {
    return str.substring(str.length()-2,str.length()-1).equals(",");
    }
    else
    {
    return str.substring(str.indexOf(input)-1, str.indexOf(input)).equals(",")
    &&str.substring(str.indexOf(input)+1, str.indexOf(input)+2).equals(",");
    }
    }
    else
    {
    return str.equals(input);
    }
    }
    //输入是两位的情况,只需要判定是否indexOf 即可
    else if(input.length()>1)
    {
    return str.indexOf(input)>-1;
    }
    //其它情况 return flase
    else
    {
    return false;
    }

    }}
      

  12.   

    上面的代码怎么乱了,再贴一次public class CheckIn {    /**
         * @param args
         */
        public static void main(String[] args) {        String type_id ="1,2,9,13,17,14,56";
            System.out.println("return1="+CheckIn.isIn(type_id,"1"));
            System.out.println("return2="+CheckIn.isIn(type_id,"2"));
            System.out.println("return3="+CheckIn.isIn(type_id,"3"));
            
            System.out.println("return4="+CheckIn.isIn(type_id,"4"));
            System.out.println("return13="+CheckIn.isIn(type_id,"13"));
            System.out.println("return5="+CheckIn.isIn(type_id,"5"));
            System.out.println("return6="+CheckIn.isIn(type_id,"6"));
            
            System.out.println("return11 1="+CheckIn.isIn("11","1"));
            System.out.println("return1 11="+CheckIn.isIn("1","11"));
            System.out.println("return55 58="+CheckIn.isIn("55,58","4"));
            
        }
        /**
         * 判断 str 是否包括 input
         * str 是以逗号分割的字符串,包括没有重复的从 0-99 中的一些数字,
         * 数字按从小到大的顺序排列
         * 
         * input 是一位或者两位的数字字符串
         */ 
        
        public static boolean isIn(String str,String input)
        {
            //str 为空,没有包括input,直接返回false
            if("".equals(str)) return false;
            if(str.indexOf(input)==-1) return false;
            
            //输入是一位数字
            /**
             * 如果str 没有逗号 只需要判断str 和input 是否相等
             * str 包括 input
             *    分三种情况
             *      位置在首位,后面是逗号,才算满足条件
             *      位置在中间,前后都是逗号,才算满足条件
             *      位置在最后,前面是逗号,才算满足条件
             */
            
            if(input.length()==1)
            {
                if(str.indexOf(",")>-1)
                {
                    
                    if(str.indexOf(input)==0)
                    {
                        return str.substring(1,2).equals(",");
                    }
                    else if(str.indexOf(input)==str.length()-1)
                    {
                        return str.substring(str.length()-2,str.length()-1).equals(",");
                    }
                    else
                    {
                        return str.substring(str.indexOf(input)-1, str.indexOf(input)).equals(",")
                        &&str.substring(str.indexOf(input)+1, str.indexOf(input)+2).equals(",");
                    }
                }    
                else
                {
                    return str.equals(input);
                }
            }
            //输入是两位的情况,只需要判定是否indexOf 即可
            else if(input.length()>1)
            {
                return str.indexOf(input)>-1;
            }
            //其它情况 return flase
            else
            {
                return false;
            }        
            
        }}
      

  13.   

    values="1,12,16,56" 
    String input="xx"
    boolean b=false;
    if(Pattern.matches("[\\d]{1,2}",input)) //验证input为1-2数字
       b = Pattern.matches("(,[\\d]{1,2})*,"+input+"(,[\\d]{1,2})*,", ","+values+","); 
       //把input作为表达式的一部分 让values去匹配 两头加了逗号 感觉好像麻烦了一点b应该是你要的结果了
      

  14.   

    我--初学者的代码:import java.util.*;
    public class TestValue{
    public static void main(String args[]){
    boolean flag = false;
    String s = "1,12,16,56";
    String[] str = s.split(",");

    System.out.print("Please input a number: ");
    Scanner reader = new Scanner(System.in);
    s = reader.next();

    for(int i=0; i<str.length;i++){
    if(s.equals(str[i])){
    flag = true;
    }
    }

    if(flag){
    System.out.println("Find it!");
    }else{
    System.out.println("Not found!");
    }
    }
    }
      

  15.   

    String[] ss=values.split(",");  
    这样就得到了用逗号分隔的字符串数组了,然后再在每个数组里面查询是否包含你所说的那个字符串.
      

  16.   

    如果不用正则表达式,可以使用这个表达式验证("," + values + ",").indexOf("," + input + ",") != -1;
      

  17.   

    动态生成正则么public static void main(String[] args) {
    String values="1,12,16,56" ;
    String regex="["+values.replaceAll(",","|")+"]";
    System.out.println("1".matches(regex));
    System.out.println("13".matches(regex));
    }
      

  18.   

      我觉得用正则表达式效率会高点,是不是就想得到1,12,16,56这四个数,代码可以这样写!
                    String input="XX";
    Pattern p1=Pattern.compile("1|12|16|56");
    Matcher m1=p1.matcher(input);
    if(m1.matches()){

    System.out.println("ok");
    }else{
     
    System.out.println("worng!");
    }
      

  19.   

    ***************************************************************************   思想决定行动,交流产生力量。  
    程序员在深圳QQ群大集   专业分类:   
    程序员在深圳JAVA群4247660   
    程序员在深圳c++群15195967   
    程序员在深圳.NET群Ⅱ:12203296   
    程序员在深圳TCP/IP协议栈开发:16956462   
    程序员在深圳JS & AJAX群:12578377   
    程序员在深圳英语学习群:23864353   
    深序员在深圳VB:11055959   
    程序员在深圳c++Ⅱ17409451   
    程序员在深圳c++群15195967   
    程序员在深圳嵌入式开发群37489763   
    程序员在深圳移动开发群31501597   
    程序员在深圳创业群33653422   不限专业分类:   
    高级群:17538442   
    第三群:2650485   
    第二群:7120862   
    第五群:29537639   
    第四群:28702746   
    第六群:10590618   
    第七群:10543585   
    第八群:12006492   
    第九群:19063074   
    第十群:2883885   
    第十一群:25460595   
    第十二群:9663807   深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达两千多人,有30%以上的成员的经验丰富  的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有  丰富实践经验的高级程序(包括参加过上亿元的项目的架构师),有很热爱技术的成员(包括自己写过嵌入  式操作系统),还有少数女程序员。  现推介如下QQ群,如有兴趣速速加入:深程高级群:17538442(此群不欢迎新手,已经在深圳工作的,月薪  6K以下的不欢迎)c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660     
    ——————————————————————————————————————————    
    希望大家不要认为群能给你送来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到  一点信息或许能带来一点启发。  
    有人说常聊QQ的人肯定技术不怎么样,但其实很多技术高朋友不需要做一些简单的重复劳动所以还是有  时间聊天的。   *****************************************************************************
      

  20.   


            /**
     * kimi
     */package test;import java.util.regex.Matcher;
    import java.util.regex.Pattern;/**
     * @author kimi
     * 
     */
    public class TestCsdn {    /**
         * @param args
         */
        public static void main(String[] args) {
            String values = "1,12,16,56";
            Pattern p = Pattern.compile("[1,|12,|16,|56,]*[1|12|16|56]");
            Matcher m = p.matcher(values);
            if (m.matches()) {
                System.out.println("ok");
            }
        }
    }
      

  21.   

    假设num是输入的数字
    public boolean chkValue(int num) {
      String values="1,12,16,56";
      String reg = "([0-9]{1,2})";
      Pattern p = Pattern.compile(reg);
      Matcher m = p.matcher(values);
      while(m.find()) {
        if(m.group(0).equals(num+"")) {
           return true;
        }
      } 
      return false;
    }
      

  22.   

    24 楼(wxg1008):动态正则是一个很好的想法不过测试没有通过 
       System.out.println("6".matches(regex));
       本来应该返回 false 的,结果确返回true27 楼 基本正确了,加一个替换就可以了import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class TestRegex { /**
     * @param args
     */
    public static void main(String[] args) {
    TestRegex test =new TestRegex();
    System.out.println("@@@@@@@@@@testMethodOne:");
    test.testMethodOne();
    System.out.println("");
    System.out.println("@@@@@@@@@@testMethodTwo:");
    test.testMethodTwo(); }
    public void testMethodOne()
    {
    String values="1,12,16,56" ;
    String regex="["+values.replaceAll(",","|")+"]";
    System.out.println("1 :"+"1".matches(regex));
    System.out.println("13:"+"13".matches(regex));
    System.out.println("6 :"+"6".matches(regex)); }
    public void testMethodTwo()
    {
    String values="1,12,16,56".replaceAll(",","|") ;
            Pattern p1=Pattern.compile(values); 
            System.out.println("1 :"+p1.matcher("1").matches());    
            System.out.println("13:"+p1.matcher("13").matches());
            System.out.println("6 :"+p1.matcher("6").matches());
    }
    }
    测试结果:
    @@@@@@@@@@testMethodOne:
    1 :true
    13:false
    6:true@@@@@@@@@@testMethodTwo:
    1 :true
    13:false
    6 :false
      
      

  23.   

    上面的方法1 修正了一下,结果正确了
            public void testMethodOne()
    {
    String values="1,12,16,56" ;
    //String regex="["+values.replaceAll(",","|")+"]";
    String regex=values.replaceAll(",","|");
    System.out.println("1 :"+"1".matches(regex));
    System.out.println("13:"+"13".matches(regex));
    System.out.println("6 :"+"6".matches(regex)); }
     
      

  24.   

    String values="1,12,16,56";
    简单办法:
    String pattern = ',' + values + ',';boolean isIn(String input) {
        if(input != null && input.indexOf(',') == -1) {
            input = ',' + input + ',';
            return pattern.indexOf(input) != -1
        }
        return false;
    }正则办法:boolean isIn(String input){
        return input.matches("1|12|16|56");
    }
      

  25.   

    http://www.japee.com.cn/jew/pages/Main.aspx
      

  26.   

    那你一定很牛X喽String values="1,12,16,56,55";
    System.out.println(values.matches(".*\\b1,\\b.*"));
    System.out.println(values.matches(".*\\b,12,\\b.*"));
    System.out.println(values.matches(".*\\b12,16\\b.*"));
    System.out.println(values.matches(".*\\b,56\\b.*"));ture
    ture 
    ture
    ture嘿嘿 不过学了一招\b 俺滴思想是跟他一样的 逆向思维
      

  27.   

    LS还须努力 最好别抄11楼的 11楼的还不算很好 只是比其它人都强些其实 按照lz的要求 下面就行了boolean xxx(String str,String aa){
        return str.matches("\\b" + aa + "\\b");
      

  28.   

           楼上好像不对吧,
           values="1,12,16,56,55"; 
    System.out.println(values.matches("\\b1\\b")); 
    System.out.println(values.matches("\\b12\\b")); 
    System.out.println(values.matches("\\b13\\b")); 
    System.out.println(values.matches("\\b6\\b")); 结果:
    false
    false
    false
    false
      

  29.   

    当然是没看他的了 要不然也不会用那么撮的表达式了
    return str.matches(".*\\b" + aa + "\\b.*");
      

  30.   

    不好意思 发现java下正则表达式的方法和.net有点不同 下面是indexOf的方法boolean xxx(String str,String aa){
        return ("," + str + ",").indexOf("," + aa + ",") > -1;
    }  
      

  31.   

    import java.util.regex.Pattern;
    public class Test
    {
      public static void main(String[] args)
    {
    String old = "1,12,16,56";
    String value = "21";
    System.out.println(checked(value, old));

    }
      
      
      public static boolean checked(String str,String old)
      {
      if(str.indexOf(',')== -1)
      {
      Pattern pa = Pattern.compile(str);
      return pa.matcher(old).find();
      }
      return false;
      }
    }
      

  32.   

    import java.util.Scanner;public final class InputNumberTester {
    private static String values = "1,12,16,56"; public static boolean Test(String numberStr) {
    try {
    Integer.parseInt(numberStr);
    return InputNumberTester.values.contains(numberStr);
    } catch (Exception e) {
    return false;
    }
    }

    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String inputString = "";
    while(!inputString.equalsIgnoreCase("quit")) {
    inputString = scanner.next();
    System.out.println(InputNumberTester.Test(inputString));
    }
    }
    }
      

  33.   

    Pattern p = Pattern.compile("1|12|16|56");
             String input = "16";
             System.out.println(p.matcher(input).matches());
              input = "1";
             System.out.println(p.matcher(input).matches());
             input = "12";
             System.out.println(p.matcher(input).matches());
              input = "56";
             System.out.println(p.matcher(input).matches());
             
             input = "1156";
             System.out.println(p.matcher(input).matches());
              input = "5";
             System.out.println(p.matcher(input).matches());
              input = "11";
             System.out.println(p.matcher(input).matches());
             input = "26";
              System.out.println(p.matcher(input).matches());
              input = "121";
             System.out.println(p.matcher(input).matches());
             input = "55";
             System.out.println(p.matcher(input).matches());
    输出:
    true
    true
    true
    true
    false
    false
    false
    false
    false
    false
      

  34.   

    24的不应该加[],加了[]他认为[]里的是一为数字,就与题目本意差远了,还是发个我的版本吧
    public class CheckIn {    /**
         * @param args
         */
        public static void main(String[] args) {        String type_id ="1,2,9,13,17,14,56";
            System.out.println("return 1="+CheckIn.isIn(type_id,"1"));
            System.out.println("return 2="+CheckIn.isIn(type_id,"2"));
            System.out.println("return 3="+CheckIn.isIn(type_id,"3"));
            
            System.out.println("return 4="+CheckIn.isIn(type_id,"4"));
            System.out.println("return 13="+CheckIn.isIn(type_id,"13"));
            System.out.println("return 5="+CheckIn.isIn(type_id,"5"));
            System.out.println("return 6="+CheckIn.isIn(type_id,"6"));
            
            System.out.println("return 11 1="+CheckIn.isIn("11","1"));
            System.out.println("return 1 11="+CheckIn.isIn("1","11"));
            System.out.println("return 55 58="+CheckIn.isIn("55,58","4"));
            
        }
        
        public static boolean isIn(String str,String input)
        {
            String newStr = str.replaceAll(",", "|");
            return input.matches(newStr);
        }}输出:
    return 1=true
    return 2=true
    return 3=false
    return 4=false
    return 13=true
    return 5=false
    return 6=false
    return 11 1=false
    return 1 11=false
    return 55 58=false不知道楼主要的是不是这个效果?
      

  35.   

    如果需要,可以再加些对str,input的验证
    public class CheckIn {    /**
         * @param args
         */
        public static void main(String[] args) {        String type_id ="1,2,9,13,17,14,56";
            System.out.println("return 1="+CheckIn.isIn(type_id,"1"));
            System.out.println("return 2="+CheckIn.isIn(type_id,"2"));
            System.out.println("return 3="+CheckIn.isIn(type_id,"3"));
            
            System.out.println("return 4="+CheckIn.isIn(type_id,"4"));
            System.out.println("return 13="+CheckIn.isIn(type_id,"13"));
            System.out.println("return 5="+CheckIn.isIn(type_id,"5"));
            System.out.println("return 6="+CheckIn.isIn(type_id,"6"));
            
            System.out.println("return 11 1="+CheckIn.isIn("11","1"));
            System.out.println("return 1 11="+CheckIn.isIn("1,11","11"));
            System.out.println("return 55 58="+CheckIn.isIn("55,58","4"));
            System.out.println("return ,58="+CheckIn.isIn(",58","58"));
            System.out.println("return  , 58="+CheckIn.isIn(" , 58","58"));
            System.out.println("return  q,58="+CheckIn.isIn("q,58","58"));
            System.out.println("return  5,58="+CheckIn.isIn("5,58","5"));
            System.out.println("return  5,58="+CheckIn.isIn("5,58","f11"));
            System.out.println("return  ,5,8,="+CheckIn.isIn(",5,8,","8"));
            
        }
        
        public static boolean isIn(String str,String input)
        {
            //如果需要,加上str和input的验证
            String reg_str = "((\\d{1,2})?,?)+";
            String reg_input = "\\d+";
            System.out.print("str(" + str + ") is Ok?" + str.matches(reg_str) + "; input(" + input + ") is ok?" + input.matches(reg_input) + " ");
            if (!str.matches(reg_str)) {
                return false;
            }
            if (!input.matches(reg_input)) {
                return false;
            }
            String newStr = str.replaceAll(",", "|");
            return input.matches(newStr);
        }}
    输出:
    str(1,2,9,13,17,14,56) is Ok?true; input(1) is ok?true return 1=true
    str(1,2,9,13,17,14,56) is Ok?true; input(2) is ok?true return 2=true
    str(1,2,9,13,17,14,56) is Ok?true; input(3) is ok?true return 3=false
    str(1,2,9,13,17,14,56) is Ok?true; input(4) is ok?true return 4=false
    str(1,2,9,13,17,14,56) is Ok?true; input(13) is ok?true return 13=true
    str(1,2,9,13,17,14,56) is Ok?true; input(5) is ok?true return 5=false
    str(1,2,9,13,17,14,56) is Ok?true; input(6) is ok?true return 6=false
    str(11) is Ok?true; input(1) is ok?true return 11 1=false
    str(1,11) is Ok?true; input(11) is ok?true return 1 11=true
    str(55,58) is Ok?true; input(4) is ok?true return 55 58=false
    str(,58) is Ok?true; input(58) is ok?true return ,58=true
    str( , 58) is Ok?false; input(58) is ok?true return  , 58=false
    str(q,58) is Ok?false; input(58) is ok?true return  q,58=false
    str(5,58) is Ok?true; input(5) is ok?true return  5,58=true
    str(5,58) is Ok?true; input(f11) is ok?false return  5,58=false
    str(,5,8,) is Ok?true; input(8) is ok?true return  ,5,8,=true
      

  36.   

    看来也没有新的方法了。
    总结一下://12,23,38,53 楼
    boolean check1(String str,String input){
        return ("," + str + ",").indexOf("," + input+ ",") > -1;
    }
    //11 楼
    boolean check2(String str,String input){
        return str.matches(".*\\"+input+"\\b.*"));
    }
    //24,27 ... 
    boolean check3(String str,String input){
        return input.matches(str.replaceAll(",","|"));
    }总体感觉这三个方法比较好
    正向(24)、逆向思维(11楼)都有总结完毕