JAVA从字符串中截取部分匹配的字符串

由于是新手,所以对很多API都不太清楚,今天老大让我从一个字符串中获取符合条件的,并且取出来。

下面是我第一次写的代码

public class ParseNumber {
	public static void main(String[] args) {		
		new ParseNumber().go();
	}
	private void go(){
		String input = "失去联系【05922629809】【啦啦啦】【059-22629809】【啦啦啦】【05922629809】";
		System.out.println(parseStr(input));
	}
	/**把要解析的字符串传进去并进行解析*/
    private String parseStr(String disStr) {
    	String phoneStr = " ";
    	if(disStr == null || "null".equals(disStr) || "NULL".equals(disStr)){
    		return phoneStr;
    	}
    	if(disStr.contains("【") && disStr.contains("】")){
    		List<String> resultList = new ArrayList<String>();
    		resultList = parseAllStr(disStr, 0, 0,resultList);
    		phoneStr = getNum(resultList);
    	}
		return phoneStr;
	}
    /**便利解析结果集,并且把第一个符合电话号码的串取出来*/
    private String getNum(List<String> resultList) {
    	for (int i = 0; i < resultList.size(); i++) {
			String regex = "\\d+";
			String currStr = resultList.get(i);
			if (currStr.matches(regex)) {
				return currStr;
			}
		}
		return " ";
	}
    /**用递归的方法编类所有被【】包围的串*/
	private List<String> parseAllStr(String disStr,int beginIndex,int endIndex,List<String> resultList){
    	beginIndex = disStr.indexOf("【", beginIndex);
		endIndex = disStr.indexOf("】",endIndex);
		if(beginIndex>=0&&endIndex>=0){
			resultList.add(disStr.substring(beginIndex+1, endIndex));
			parseAllStr(disStr, beginIndex+1, endIndex+1,resultList);
		}
    	return resultList;
    }
}

很麻烦,当时是满足要求了,然后老大看了一下说可能太麻烦了,后来我就去查了一查资料,并且发现有下面这样的API,这是我第二次写的代码

public class ParseNumber1 {
	public static void main(String[] args) {
		String s1 ="失去联系【05922629809】【啦啦啦】【059-22629809】【啦啦啦】【05922629809】";
		Pattern pattern=Pattern.compile("【\\d+】|【\\d+-\\d+】");
		Matcher matcher = pattern.matcher(s1);
		if (matcher.find()){
		    //你的代码
			int beginIndex = matcher.start();
			int endInDex = matcher.end();
		    System.out.println(beginIndex);
		    System.out.println(endInDex);
		    System.out.println(s1.substring(beginIndex+1, endInDex-1));
		}
	}
}

我草草草,这么简单?就搞定了,所以在这里做一个笔记,原谅我是小白。。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值