在與C語言交互時出現的char 類型length不一致,作爲轉換特出下列

package com.llivison.ws.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * 爲實現在json字符串傳輸完整
 */
public class TcpToJsonNumber {
    private final static Logger logger = LoggerFactory.getLogger(TcpToJsonNumber.class);

    //對字符串進行編輯
    public static String jsonNumber(String str) {
        String result = "$" + Zerofill(String.valueOf(isStringLength(str))) + str;
        logger.info("tcpjsonNumber {}", result);
        return result;
    }

    //遞歸調用不夠4位補0
    private static String Zerofill(String str) {
        if (str.length() < 4) str = Zerofill("0" + str);
        return str;
    }

    //判斷是否是中文
    private static boolean isChinese(char c) {
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
            return true;
        }
        return false;
    }

    //拿到字符串長度(C語言中每個char 1字節 8位 java中 char 2字節 16位)
    private static int isStringLength(String strName) {
        int result = 0;
        char[] ch = strName.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            char c = ch[i];
            if (isChinese(c)) {
                result += 2;
            } else {
                result++;
            }
        }
        return result;
    }
}

發佈了44 篇原創文章 · 獲贊 12 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章