Java根据特定字符拆分字符串(截取以**开头、**结尾)

Java根据特定字符拆分字符串(截取以**开头、**结尾)

假设我们现在要通过java解析一段长报文,而这一段长报文中可能关联多个子报文,每个子报文的规则都是以“7e”开头、“6e”结尾。那么我们就需要一套拆分算法,把长报文拆分成多个符合条件的子报文。

其实这种的实现方式有很多种,例如:substring截取并且标记下标、获取特定字符下标集合截取…

在这里,我们采用最简单的一种方式:通过split拆分解析

代码实现:

public class Test02 {
    
    

    /**
     * 把长报文拆分成多个子报文
     * 拆分规则:以begin开始,以end结尾
     * @param info 待拆分的长报文
     * @param begin 开始字符
     * @param end 结尾字符
     * @return 符合规则的子报文集合
     */
    public static List<String> getChildMsgByParent(String info,String begin,String end){
    
    
        //通过起始字符拆分成数组
        String[] split = info.split(begin);
        List<String> list = new ArrayList<>();
        //遍历,从第二个元素开始取值(第一个元素为无效元素)
        for (int i = 1; i < split.length; i++) {
    
    
            String str = split[i].substring(0,split[i].lastIndexOf(end)+end.length());
            if (str.length() > end.length()) {
    
    
                list.add(begin+str);
            }
        }
        return list;
    }

    public static void main(String[] args) {
    
    
        String info = "00007e0552000102ed8101b13600000146000004fe0000015e000027100000017f0000057d0000314600000a500000314700000017a00000000000000f146000000000000f147000000000000f14e0000000032106e0100000000000000010000002c000000000000000000000000000000000000007e05530001023182001f06000002220900000316000000031700000003180000000319000000038f00025c6e0000";
        List<String> list = getChildMsgByParent(info, "7e", "6e");
        for (String s : list) {
    
    
            System.out.println(s);
        }
    }
}

再看控制台打印结果:
控制台打印

猜你喜欢

转载自blog.csdn.net/weixin_50989469/article/details/118328178