StringUtil.ts 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. import { JsonAsset } from "cc";
  2. import { MathUtil } from "./MathUtil";
  3. import { L_1Conf } from "../config/L_1Conf";
  4. import { LanguageType } from "../../game/common/InterfaceAddEnum";
  5. const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
  6. export class StringUtil {
  7. static _languageType:LanguageType = LanguageType.Zh
  8. static get languageType() {
  9. return this._languageType
  10. }
  11. static set languageType(value:LanguageType) {
  12. this._languageType = value
  13. }
  14. /**
  15. * 得到一个唯一值
  16. * @param len 长度
  17. * @param radix 进制
  18. */
  19. static getUUID(len: number = 12, radix: number = 16) {
  20. let uuid = [];
  21. radix = radix || chars.length;
  22. if (len) {
  23. for (let i = 0; i < len; ++i)
  24. uuid[i] = chars[0 | Math.random() * radix];
  25. } else {
  26. uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
  27. uuid[14] = "4";
  28. for (let i = 0; i < 36; ++i) {
  29. if (!uuid[i]) {
  30. let r = 0 | Math.random() * 16;
  31. uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
  32. }
  33. }
  34. }
  35. return uuid.join("");
  36. }
  37. /**
  38. * 解析配置表内容
  39. * @param str 配置表中内容 1:20#2:20
  40. * */
  41. static analysisConfStr(str) {
  42. let replaceStr = str.replaceAll('#', ',"')
  43. replaceStr = replaceStr.replaceAll(':', '":')
  44. let ObjStr = `{"${replaceStr}}`
  45. let Json = JSON.parse(ObjStr)
  46. return Json
  47. }
  48. /**
  49. * 解析配置表内容
  50. * @param str 配置表中内容 {"123":123}#{"1232":123}
  51. * */
  52. static analysisConfStrA(str) {
  53. let replaceStr = str.replaceAll('#', ',')
  54. let Json = JSON.parse(`[${replaceStr}]`)
  55. return Json
  56. }
  57. /**
  58. * 解析配置表内容
  59. * @param str 配置表中内容 attack#hp#defence#speed
  60. * */
  61. static analysisConfStrE(str) {
  62. let replaceStr = str.replaceAll('#', '","');
  63. let Json = JSON.parse(`["${replaceStr}"]`)
  64. return Json
  65. }
  66. /**
  67. * 解析配置表内容
  68. * @param str 配置表中内容 speed:60
  69. * */
  70. static analysisConfStrB(str) {
  71. let replaceStr = str.replaceAll(':', ',')
  72. let Json = JSON.parse(`[${replaceStr}]`)
  73. return Json
  74. }
  75. /**
  76. * 解析配置表内容
  77. * @param str 配置表中内容 speed:14,hp:500,attack:105,defence:38#speed:14,hp:500,attack:105,defence:50
  78. * */
  79. static analysisConfStrC(str) {
  80. let replaceStr = str.replaceAll(',', ',"')
  81. replaceStr = replaceStr.replaceAll('#', '}],[{"')
  82. replaceStr = replaceStr.replaceAll(':', '":')
  83. let Json = JSON.parse(`[[{"${replaceStr}}]]`)
  84. // speed":14,"hp":500,"attack":105,"defence":38],["speed":14,"hp":500,"attack":105,"defence":50]]
  85. // let strA =[{speed:14,hp:500,attack":105,defence":38},{speed:14,hp:500,attack:105}]
  86. return Json
  87. }
  88. /**
  89. * 解析配置表内容
  90. * @param str 配置表中内容 90100201:1000,90100202:1000
  91. * */
  92. static analysisConfStrD(str) {
  93. let replaceStr = str.replaceAll(',', ',"')
  94. replaceStr = replaceStr.replaceAll(':', '":')
  95. let Json = JSON.parse(`{"${replaceStr}}`)
  96. // speed":14,"hp":500,"attack":105,"defence":38],["speed":14,"hp":500,"attack":105,"defence":50]]
  97. // let strA =[{speed:14,hp:500,attack":105,defence":38},{speed:14,hp:500,attack:105}]
  98. return Json
  99. }
  100. /**
  101. * 解析配置奖励内容
  102. * @param str 配置表中内容 material.1:100#material.1:100
  103. * */
  104. static analysisConfStrM(str) {
  105. let value = [];
  106. var allValue = [];
  107. var allAward = str.split('#');
  108. for (var n = 0; n < allAward.length; n++) {
  109. var oneAward = allAward[n].split(':');
  110. if (2 == oneAward.length) {
  111. value = oneAward[0].split('.');
  112. value.push(+oneAward[1]);
  113. } else {
  114. value = null;
  115. }
  116. allValue.push(value);
  117. }
  118. value = allValue;
  119. return value
  120. }
  121. /**
  122. * 概率计算
  123. * @param total 所有和
  124. * @param num 当前数值
  125. * */
  126. static oodsCount(total, num) {
  127. return MathUtil.accMul(num / total, 100) + '%';
  128. }
  129. /**
  130. * 格式化字符串
  131. * @param str 目标字符串
  132. * @param val 自定义参数
  133. */
  134. static format(str: string, ...val: any[]) {
  135. //format("{0} is {1} {2}", "This", "formatting", "hack");
  136. for (let i = 0; i < val.length; ++i) {
  137. str = str.replace(`{${i}}`, val[i].toString());
  138. }
  139. return str;
  140. }
  141. /**
  142. * 格式化数字,12345 = 12.35K
  143. * @param value 数字
  144. * @param fixed 保留小数位
  145. */
  146. static numberToThousand(value: number, fixed: number = 2) {
  147. let k = 1000;
  148. let sizes = ["", "K", "M", "G"];
  149. if (value < k) {
  150. return value.toString();
  151. } else {
  152. let i = Math.floor(Math.log(value) / Math.log(k));
  153. let r = ((value / Math.pow(k, i)));
  154. return r.toFixed(fixed) + sizes[i];
  155. }
  156. }
  157. /**
  158. * 格式化数字,12345 = 12345 = 1.23万
  159. * @param value 数字
  160. * @param fixed 保留小数位
  161. */
  162. static numberToTenThousand(value: number, fixed: number = 2) {
  163. let k = 10000;
  164. let sizes = ["", "万", "亿", "万亿"];
  165. if (value < k) {
  166. let count = value
  167. if (value.toString().length > 8) {
  168. count = Number(value.toFixed(2))
  169. }
  170. return count.toString();
  171. } else {
  172. let i = Math.floor(Math.log(value) / Math.log(k));
  173. // let count = ((value / Math.pow(k, i))).toFixed(fixed) + sizes[i];
  174. return ((value / Math.pow(k, i))).toFixed(fixed) + sizes[i];
  175. }
  176. }
  177. /**
  178. * 获取多语言数据
  179. * @param key 多语言的key
  180. * @param keyArr 替换值数组,没有则不传
  181. * */
  182. static getLanguageData(key, keyArr = [], translate = false) {
  183. if (!key) {
  184. return '未配置';
  185. }
  186. let getStr = (key)=>{
  187. let strKey = String(key)
  188. // let page = strKey.substring(0,1)
  189. // let str = LanguageConf.data[strKey];
  190. let str:string = null
  191. let keyNumber = Number(strKey)
  192. if(keyNumber){
  193. if(keyNumber < 100000){
  194. }else if(keyNumber < 200000){
  195. return L_1Conf.data[keyNumber][StringUtil.languageType]
  196. }else{
  197. return ""
  198. }
  199. }
  200. if (str){
  201. return str;
  202. }else{
  203. return key;
  204. }
  205. }
  206. let strKey = String(key)
  207. let str = getStr(strKey);
  208. if (str){
  209. for (let i = 0; i < keyArr.length; ++i) {
  210. let replaceStr = keyArr[i]
  211. if (translate) {
  212. replaceStr = (str.search(`${i}%]`) >= 0) ? MathUtil.accMul(Number(getStr(keyArr[i])), 100) + '%' : getStr(keyArr[i]);
  213. } else {
  214. replaceStr = (str.search(`${i}%]`) >= 0) ? MathUtil.accMul(Number(getStr(keyArr[i])), 100) + '%' : replaceStr;
  215. }
  216. str = str.replace(`{${i}}`, replaceStr);
  217. str = str.replace(`[${i}%]`, " ");
  218. }
  219. return str;
  220. }else{
  221. return key;
  222. }
  223. }
  224. // 数字转字符串
  225. static bigNumberToStr(num) {
  226. if(num < 10000){
  227. return Math.floor(num).toString();
  228. }else if(num < 1000000){
  229. return (num / 1000).toFixed(2) + 'K'
  230. }else if(num < 1000000000){
  231. return (num / 1000000).toFixed(2) + 'M'
  232. }else{
  233. return (num / 1000000000).toFixed(2) + 'B'
  234. }
  235. }
  236. }