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);
}
}
}
再看控制台打印结果: