Java 递归循环字符串

我的递归主要实现的是从整个字符串中拿到我想要的数据,然后进行比对,然后做相应的操作。下面是相关代码:

public static void setData(byte[] totalData) { // totalData是要递归的字符串

    String parameter = null;
    int length = 0;
//是用来区分编号0B跟其他编号的,因为我没执行完,一个编号就要给服务期返回数的
    boolean isReturn = false; 
    String number = getAnString(totalData, 0, 1);//这是一个截取数据的方法,第一个参数是对象,第二个参数是下标位置,第三个是要截取长度
    KLog.e("编号", number);
    length = getAnIntHex(totalData, 1, 1, 16);//同上,上面是截取后转为字符串型,这是转为整型(16进制)
    KLog.e("参数长度", length);
    parameter = convertHexToString(getAnString(totalData, 2, length));
    KLog.e("参数值", parameter);
    int type = totalData[2];
    KLog.e("类型", type);
    List<Parameter> parameter0B = DataSupport.findAll(Parameter.class);
    for (Parameter parameters : parameter0B) {//遍历数据库,这是郭霖开源的数据库
        Parameter parameter1 = new Parameter();//这是获取数据库对象
        StringBuffer fb = new StringBuffer();
        switch (number) {
            case "01":
                isReturn = true;
                parameter1.setDeviceID(parameter);//设置数据
                parameter1.updateAll("Uniqueness=?", "Pan");
                if (parameter.equals(parameter1.getDeviceID())) {//比较判读是否保存成功
                    setSucceed(number, fb);//返回结果
                } else {
                    setFailure(number, fb);//返回结果
                }
                recursion(totalData, length);//递归前判读是否还有数据,加调用自身开始递归
                break;
            case "02":
                isReturn = true;
                parameter1.setrCode(parameter);
                parameter1.updateAll("Uniqueness=?", "Pan");
                if (parameter.equals(parameter1.getrCode())) {
                    setSucceed(number, fb);
                } else {
                    setFailure(number, fb);
                }
                recursion(totalData, length);
                break;
            
    
            ...... 中间省略部分代码
            case "0F":
                isReturn = true;
                parameter1.setScreenSize(type);
                parameter1.updateAll("Uniqueness=?", "Pan");
                if (type == parameter1.getScreenSize()) {
                    setSucceed(number, fb);
                } else {
                    setFailure(number, fb);
                }
                recursion(totalData, length);
                break;
            default:
                break;
        }
        if (isReturn) {
            ProtocolManager.getInstance().InternetAllWriteAnswer(parameters.getDeviceID(), parameters.getrCode(), fb);//这是做一次性返回上面所有的配置结果
        }
    }
}
private static void setFailure(String number, StringBuffer fb) {
    fb.append(number);
    fb.append("00");
}

private static void setSucceed(String number, StringBuffer fb) {
    fb.append(number);
    fb.append("01");
}

private static void recursion(byte[] totalData, int length) {
    if (totalData.length - (2 + length) > 0) {
        byte[] data = new byte[totalData.length - (2 + length)];
        System.arraycopy(totalData, 2 + length, data, 0, totalData.length - (2 + length));
        KLog.e("还剩余参数", bytes2HexString(data));
        if (data.length > 0) {
            setData(data);
        }
    }
}
public static String getAnString(byte[] buff, int index, int length) {
    return bytes2HexString(ProtocolManager.getInstance().parseParameter(buff, index, length));
}
public byte[] parseParameter(byte[] receive, int index, int length) {
    byte[] data = new byte[length];
    System.arraycopy(receive, index, data, 0, length);
    return data;
}
public static int getAnIntHex(byte[] buff, int index, int length, int radix) {
    return Integer.parseInt(bytes2HexString(ProtocolManager.getInstance().parseParameter(buff, index, length)), radix);
}
public static String convertHexToString(String hex) {//十六进制转换为字符串
    StringBuilder sb = new StringBuilder();
    StringBuilder temp = new StringBuilder();
    //49204c6f7665204a617661 split into two characters 49, 20, 4c...
    for (int i = 0; i < hex.length() - 1; i += 2) {
        //grab the hex in pairs
        String output = hex.substring(i, (i + 2));
        //convert hex to decimal
        int decimal = Integer.parseInt(output, 16);
        //convert the decimal to character
        sb.append((char) decimal);
        temp.append(decimal);
    }
    return sb.toString();
}
//2字节byte[]转16进制字符串
public static String bytes2HexString(byte[] data) {
    StringBuffer sb = new StringBuffer();
    String hex;
    for (int i = 0; i < data.length; i++) {
        hex = Integer.toHexString(data[i] & 0xFF);
        if (hex.length() == 1) {
            hex = '0' + hex;
        }
        sb.append(hex.toUpperCase());
    }
    return sb.toString();
}
这只是我开发中做的笔记,大家可以作为参考就行。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

panyingdao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值