import { JsonAsset } from "cc"; import { MathUtil } from "./MathUtil"; import { LanguageConf } from "../config/LanguageConf"; const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""); export class StringUtil { /** * 得到一个唯一值 * @param len 长度 * @param radix 进制 */ static getUUID(len: number = 12, radix: number = 16) { let uuid = []; radix = radix || chars.length; if (len) { for (let i = 0; i < len; ++i) uuid[i] = chars[0 | Math.random() * radix]; } else { uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-"; uuid[14] = "4"; for (let i = 0; i < 36; ++i) { if (!uuid[i]) { let r = 0 | Math.random() * 16; uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; } } } return uuid.join(""); } /** * 解析配置表内容 * @param str 配置表中内容 1:20#2:20 * */ static analysisConfStr(str) { let replaceStr = str.replaceAll('#', ',"') replaceStr = replaceStr.replaceAll(':', '":') let ObjStr = `{"${replaceStr}}` let Json = JSON.parse(ObjStr) return Json } /** * 解析配置表内容 * @param str 配置表中内容 {"123":123}#{"1232":123} * */ static analysisConfStrA(str) { let replaceStr = str.replaceAll('#', ',') let Json = JSON.parse(`[${replaceStr}]`) return Json } /** * 解析配置表内容 * @param str 配置表中内容 attack#hp#defence#speed * */ static analysisConfStrE(str) { let replaceStr = str.replaceAll('#', '","'); let Json = JSON.parse(`["${replaceStr}"]`) return Json } /** * 解析配置表内容 * @param str 配置表中内容 speed:60 * */ static analysisConfStrB(str) { let replaceStr = str.replaceAll(':', ',') let Json = JSON.parse(`[${replaceStr}]`) return Json } /** * 解析配置表内容 * @param str 配置表中内容 speed:14,hp:500,attack:105,defence:38#speed:14,hp:500,attack:105,defence:50 * */ static analysisConfStrC(str) { let replaceStr = str.replaceAll(',', ',"') replaceStr = replaceStr.replaceAll('#', '}],[{"') replaceStr = replaceStr.replaceAll(':', '":') let Json = JSON.parse(`[[{"${replaceStr}}]]`) // speed":14,"hp":500,"attack":105,"defence":38],["speed":14,"hp":500,"attack":105,"defence":50]] // let strA =[{speed:14,hp:500,attack":105,defence":38},{speed:14,hp:500,attack:105}] return Json } /** * 解析配置表内容 * @param str 配置表中内容 90100201:1000,90100202:1000 * */ static analysisConfStrD(str) { let replaceStr = str.replaceAll(',', ',"') replaceStr = replaceStr.replaceAll(':', '":') let Json = JSON.parse(`{"${replaceStr}}`) // speed":14,"hp":500,"attack":105,"defence":38],["speed":14,"hp":500,"attack":105,"defence":50]] // let strA =[{speed:14,hp:500,attack":105,defence":38},{speed:14,hp:500,attack:105}] return Json } /** * 解析配置奖励内容 * @param str 配置表中内容 material.1:100#material.1:100 * */ static analysisConfStrM(str) { let value = []; var allValue = []; var allAward = str.split('#'); for (var n = 0; n < allAward.length; n++) { var oneAward = allAward[n].split(':'); if (2 == oneAward.length) { value = oneAward[0].split('.'); value.push(+oneAward[1]); } else { value = null; } allValue.push(value); } value = allValue; return value } /** * 概率计算 * @param total 所有和 * @param num 当前数值 * */ static oodsCount(total, num) { return MathUtil.accMul(num / total, 100) + '%'; } /** * 格式化字符串 * @param str 目标字符串 * @param val 自定义参数 */ static format(str: string, ...val: any[]) { //format("{0} is {1} {2}", "This", "formatting", "hack"); for (let i = 0; i < val.length; ++i) { str = str.replace(`{${i}}`, val[i].toString()); } return str; } /** * 格式化数字,12345 = 12.35K * @param value 数字 * @param fixed 保留小数位 */ static numberToThousand(value: number, fixed: number = 2) { let k = 1000; let sizes = ["", "K", "M", "G"]; if (value < k) { return value.toString(); } else { let i = Math.floor(Math.log(value) / Math.log(k)); let r = ((value / Math.pow(k, i))); return r.toFixed(fixed) + sizes[i]; } } /** * 格式化数字,12345 = 12345 = 1.23万 * @param value 数字 * @param fixed 保留小数位 */ static numberToTenThousand(value: number, fixed: number = 2) { let k = 10000; let sizes = ["", "万", "亿", "万亿"]; if (value < k) { let count = value if (value.toString().length > 8) { count = Number(value.toFixed(2)) } return count.toString(); } else { let i = Math.floor(Math.log(value) / Math.log(k)); // let count = ((value / Math.pow(k, i))).toFixed(fixed) + sizes[i]; return ((value / Math.pow(k, i))).toFixed(fixed) + sizes[i]; } } /** * 获取多语言数据 * @param key 多语言的key * @param keyArr 替换值数组,没有则不传 * */ static getLanguageData(key, keyArr = [], translate = false) { if (!key) { return '未配置'; } let getStr = (key)=>{ let strKey = String(key) // let page = strKey.substring(0,1) // let str = LanguageConf.data[strKey]; let str = LanguageConf.data[strKey]; if (str){ return str; }else{ return key; } } let strKey = String(key) let str = getStr(strKey); if (str){ for (let i = 0; i < keyArr.length; ++i) { let replaceStr = keyArr[i] if (translate) { replaceStr = (str.search(`${i}%]`) >= 0) ? MathUtil.accMul(Number(getStr(keyArr[i])), 100) + '%' : getStr(keyArr[i]); } else { replaceStr = (str.search(`${i}%]`) >= 0) ? MathUtil.accMul(Number(getStr(keyArr[i])), 100) + '%' : replaceStr; } str = str.replace(`{${i}}`, replaceStr); str = str.replace(`[${i}%]`, " "); } return str; }else{ return key; } } // 数字转字符串 static bigNumberToStr(num) { if(num < 10000){ return Math.floor(num).toString(); }else if(num < 1000000){ return (num / 1000).toFixed(2) + 'K' }else if(num < 1000000000){ return (num / 1000000).toFixed(2) + 'M' }else{ return (num / 1000000000).toFixed(2) + 'B' } } }