Java取字符串子串练习

需求:

需求:查找出以begin开头以end结尾的字符串
参数:
String str:目标字符串
String begin:子串开始条件
String end:子串结束条件
返回值类型: String[] 这里是引用

解决方案:

    public String[] getSubStr(String s, String begin, String end){
        List<String> strList = new ArrayList<>();
        if (!isContain(s,begin,end)){//不满足取串条件返回空
            return new String[]{};
        }
        do {
            int b = s.indexOf(begin);//获取s中第一个begin索引位置
            int e = s.indexOf(end);//获取s中第一个end的索引位置
            if (b<e) {//b<e时取串
                strList.add(s.substring(b+1, e));
            }
            s = s.substring(e + 1);//从end的下一个索引位置开始取剩余子串
        }while (isContain(s,begin,end));//满足条件时再次取串
        return strList.toArray(new String[strList.size()]);//将ArrayList转为字符串数组
    }

	//取子串条件:字符串s不为空且同时包含begin和end
    public boolean isContain(String s, String begin, String end){
        if (s!=null&&!"".equals(s)&&s.contains(begin)&&s.contains(end)) {
            return true;
        }
        return false;
    }

测试:

    @Test
    public void testDemo (){
        String str = "[1000]01]s[a[g[kkkk]ja]][aaa][ig]we[hello]";
        String begin = "[";
        String end = "]";
        String[] subStr = getSubStr(str, begin, end);
        System.out.println(Arrays.toString(subStr));
        //运行结果:[1000, a[g[kkkk, aaa, ig, hello]
    }

分析:
(1)我写的这个方法从左往右识别起止字符,未考虑嵌套情况,故不重复取子串。
(2)若嵌套情况也需取出,我做了如下改变:

 	if (b<e) {//b<e时取串
         strList.add(s.substring(b+1, e));
            s = s.substring(b + 1);//从begin的下一个索引位置开始找剩余子串
         }else{//若b>e,//从begin的索引位置开始找剩余子串
            s = s.substring(b);
    }
    //运行结果:[1000, a[g[kkkk, g[kkkk, kkkk, aaa, ig, hello]

(3)若需求是从两端或从中间开始找成对的起止条件并进行取串,这个方法就无能为力了
(4)虽然需求简单,但要考虑到各种情况,并进行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值