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();
}
這只是我開發中做的筆記,大家可以作爲參考就行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章