问题是这样的:现在的有一个字符串,以逗号分割的2位或者1 位数字
例如:
values="1,12,16,56"输入一个1 到2 位的数字字符,判断是否在存在于上面的字符中
只有 1 12 16 56 这4个数字符合条件,其它的都不符合。怎样写这样的一个正则表达式?
例如:
values="1,12,16,56"输入一个1 到2 位的数字字符,判断是否在存在于上面的字符中
只有 1 12 16 56 这4个数字符合条件,其它的都不符合。怎样写这样的一个正则表达式?
你是说values里有一些1-2位的数字,
输入的时候必须是values里面数字么?这个有必要用正则表达式么?
你可以用String.split(",")把你的字符串劈开得到一个字符串数组,再看输入的数字是否在这个数组里面就可以了。
if(value.indexOf(you) != -1)
System.out.println(包含);
这样就得到了用逗号分隔的字符串数组了
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中");
}
}
}
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
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中");
}
}
}
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;
}
}}
* @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;
}
}}
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应该是你要的结果了
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!");
}
}
}
这样就得到了用逗号分隔的字符串数组了,然后再在每个数组里面查询是否包含你所说的那个字符串.
String values="1,12,16,56" ;
String regex="["+values.replaceAll(",","|")+"]";
System.out.println("1".matches(regex));
System.out.println("13".matches(regex));
}
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!");
}
程序员在深圳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的人肯定技术不怎么样,但其实很多技术高朋友不需要做一些简单的重复劳动所以还是有 时间聊天的。 *****************************************************************************
/**
* 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");
}
}
}
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;
}
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
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)); }
简单办法:
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");
}
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 俺滴思想是跟他一样的 逆向思维
return str.matches("\\b" + aa + "\\b");
}
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
return str.matches(".*\\b" + aa + "\\b.*");
return ("," + str + ",").indexOf("," + aa + ",") > -1;
}
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;
}
}
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));
}
}
}
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
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不知道楼主要的是不是这个效果?
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
总结一下://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楼)都有总结完毕