龙哥网

龙哥网

JAVA根据关键字获取字符串中的参数(java根据字符串调用方法)
2021-12-18

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

 实现思路:

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

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

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

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

代码实现:

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

 Java
/**
 * 查询一个字符串再另一个字符串中出现的下标
 * @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、根据关键字 获取字符串中参数

 Java
/**
 * 根据关键字 获取字符串中参数
 * @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;}

测试结果:


免责声明
本站部分资源来源于互联网 如有侵权 请联系站长删除
龙哥网是优质的互联网科技创业资源_行业项目分享_网络知识引流变现方法的平台为广大网友提供学习互联网相关知识_内容变现的方法。