/*
* 需求:按照电话机表盘数字与字符的对应关系(这里用数字1而不是0代表空格),用数字串匹配字符串
* 思路:获得用户输入,判断是不是纯数字串,如果是这拼接正则表达式,和各个字符串匹配
* */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumbersMatchString
{
public static void main(String argu[]) throws IOException
{
String str[] = {"watch","match","noise","risky","stock","work","back",
"come","deal","desk","book","java","tool","face"};//测试字符串数组
NumbersMatchString nms = new NumbersMatchString();
String numStr = nms.getInput(); //得到用户的合法输入
String regex = nms.getRegex(numStr); //通过用户输入获得正则表达式
Pattern p = Pattern.compile(regex); //获得正则对象
int count = 0;
for(String st:str)
{
Matcher m = p.matcher(st); //获得匹配器
if(m.lookingAt()) //判断字符串中有没有符合正则的子串(从第〇位开始匹配,匹配不到则返回false)
{
++count; //统计匹配到的字符串数
System.out.println(st); //如果匹配则输出
}
}
System.out.println("共匹配到" + count + "个字符串!");
}
/**
* @return:返回用户输入的合法字符串
* @throws IOException:方便起见,没有处理异常
*/
public String getInput() throws IOException
{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入[1-9]组成的数字串:");
String str = bf.readLine();
Pattern p = Pattern.compile("[0\\D]");//判断是不是包含非数字和0
Matcher m = p.matcher(str);
while(str.length()<=0||m.matches())//字符串长度<=0或者包含非数字和0时需要重新输入
{
System.out.println("输入必须是由数字[1-9]组成的数字串,请重新输入:");
str = bf.readLine();
m = p.matcher(str);
}
return str;
}
/**
* @param str:根据str来生成正则表达式
* @return:返回生成的正则表达式
*/
public String getRegex(String str)
{
String regex = "";
int i = 0;
for(;i<str.length();++i)
{
switch(str.charAt(i))
{
case '1':regex += " ";break;
case '2':regex += "[a-c]";break;
case '3':regex += "[d-f]";break;
case '4':regex += "[g-i]";break;
case '5':regex += "[j-l]";break;
case '6':regex += "[m-o]";break;
case '7':regex += "[p-s]";break;
case '8':regex += "[t-v]";break;
case '9':regex += "[w-z]";break;
default:;
}
}
return regex;
}
}
我的java之路——按照电话机表盘数字与字符的对应关系(这里用数字1而不是0代表空格),用数字串匹配字符串
最新推荐文章于 2024-10-30 18:07:32 发布