StringUtil.ts 7.3 KB

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