JAVA根据关键字获取字符串中的参数

原创  郑建华   2021-01-24   125人阅读  2 条评论

image.png

    现有一接口语句,用于数据集接口维护,其中sql查询入参是使用的'${}'来标识的。在实际使用过程中,需要将sql中的参数全部提取出来,那应该如何处理呢?经过资料查询,发现并没有现成的API可以直接使用,所以,这个轮子得自己来造。效率问题暂时不考虑,先实现功能,再做优化。

 实现思路:

    1、参数值可能有多个,又是在字符串中,可以利用下标截取字符串的方式。

    2、找到字符串中相同的关键字,如 '${ 和 }' ,利用两个下标值就能截取到实际的参数值

    3、查询全部'${的下标生成集合,查询全部}'的下标生成集合

    4、根据两个下标集合的一一匹配关系,截取字符串中的全部参数

代码实现:

1、查询一个字符串再另一个字符串中出现的下标

/**
 * 查询一个字符串再另一个字符串中出现的下标
 * @param str
 * @param key
 * @return
 */
public static List<Integer> searchAllIndex(String str, String key) {
    List<Integer> allIndex=new ArrayList<Integer>();
    int a = str.indexOf(key);//*第一个出现的索引位置
    while (a != -1) {
        allIndex.add(a);
        a = str.indexOf(key, a + 1);//*从这个索引往后开始第一个出现的位置
    }
    return allIndex;
}

2、根据关键字 获取字符串中参数

/**
 * 根据关键字 获取字符串中参数
 * @param string
 * @param keyStart 如'${
 * @param keyEnd 如 }'
 * @return
 */
public static List<String> getKeyListFromString(String string,String keyStart,String keyEnd){
    // 返回数据
    List<String> allStringList=new ArrayList<String>();
    // 判断不为空
    if(StringUtils.isNotBlank(string)){
        // 去空格
        string = string.replaceAll("\\\\s*","");
        // 开始keyIndex集合
        List<Integer> firstIndex=searchAllIndex(string,keyStart);
        // 结束keyIndex集合
        List<Integer> endIndex=searchAllIndex(string,keyEnd);
        // 不为空
        if(CollectionUtils.isNotEmpty(firstIndex)){
            // 循环
            for(int i=0;i<firstIndex.size();i++){
                // 截取关键字部分
                String temp = string.substring(firstIndex.get(i)+keyStart.length(),endIndex.get(i)) ;
                // 添加到返回数据中
                allStringList.add(temp);
            }
        }
    }
    return allStringList;
}

测试结果:

image.png

本文地址:https://www.zjh336.cn/?id=2023
版权声明:本文为原创文章,版权归 郑建华 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

 评论列表

  1. 今日头条新闻
    今日头条新闻 【实习生】  @回复

    文章不错支持一下吧

  2. 今日新鲜事
    今日新鲜事 【实习生】  @回复

    文章不错非常喜欢