StringUtils.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /**
  2. * 字符串工具类
  3. * @author 袁浩
  4. *
  5. */
  6. export class StringUtils {
  7. public constructor() {
  8. }
  9. /**
  10. * 类似C#中的格式化字符串函数
  11. * 例:format("Hello {0}",world)
  12. * @param str {string} 要格式化的字符串
  13. * @param args {Array<any>} 参数列表
  14. * @returns {string} 格式化之后的字符串
  15. */
  16. public static format(str: string, ...args: Array<any>): string {
  17. var result: string = str;
  18. for (var i: number = 0; i < args.length; i++) {
  19. var key = `{${i}}`;
  20. var value = String(args[i]);
  21. while (result.indexOf(key) != -1) {
  22. result = result.replace(key, value);
  23. }
  24. }
  25. return result;
  26. }
  27. /**
  28. * 判断是否是空字符串,null、undefined和""都会返回true
  29. * @returns {boolean} 是否是空字符串
  30. */
  31. public static isEmpty(value: string): boolean {
  32. return value == null || value == undefined || value.length == 0;
  33. }
  34. /**
  35. * 去左右两端空格
  36. */
  37. public static trim(str): string {
  38. return str.replace(/(^\s*)|(\s*$)/g, "");
  39. }
  40. public static formatStar(str: string, beginLength = 2, endLength = 2) {
  41. var temp = str.split("");
  42. var starLength = str.length - beginLength - endLength;
  43. var star = '';
  44. for (let i = 0; i < starLength; i++) {
  45. star += '*';
  46. }
  47. temp.splice(beginLength, starLength, star);
  48. return temp.join("");
  49. }
  50. /**
  51. * 颜色配置
  52. */
  53. public static colorOption: { [key: string]: string } = {
  54. /** 红色1 */
  55. red1: '#be2c1d',
  56. /** 棕色1 */
  57. bro1: '#4E301B',
  58. /** 白色 */
  59. white: '#FFFFFF',
  60. /** 白色 */
  61. green: '#4AFF32',
  62. }
  63. public static getRichText(str: string, opt?: any) {
  64. opt = opt || this.colorOption;
  65. var newStr: string = str;
  66. var i: number = 0;
  67. var begin: number;
  68. var end: number;
  69. var sub: string;
  70. var searchValue: string;
  71. var replaceValue: string;
  72. var color_key: string;
  73. // 解析颜色
  74. while (i < str.length) {
  75. begin = str.indexOf("[", i);
  76. end = str.indexOf("]", begin);
  77. if (begin != -1 && end != -1) {//把[redXXX]转成富文本
  78. searchValue = str.slice(begin, end + 1);
  79. // 颜色内容
  80. color_key = str.slice(begin + 1, begin + str.indexOf("="));
  81. let color_str = opt[color_key]
  82. if (color_str) {
  83. sub = str.slice(begin + color_key.length + 2, end);
  84. replaceValue = '<color=' + color_str + '>' + sub + '</color>';
  85. newStr = newStr.replace(searchValue, replaceValue);
  86. }
  87. i = end;
  88. }
  89. else {
  90. break;
  91. }
  92. }
  93. let size_index: number = 0;
  94. let size_begin: number = 0;
  95. let size_end: number = 0;
  96. let size_searchValue: string;
  97. // let size_sub: string
  98. // 解析尺寸{40=100%},100%是40尺寸.例子2:[bro对目标造成][red{40=104%}][bro攻击伤害]
  99. while (size_index < newStr.length) {
  100. size_begin = newStr.indexOf("{", size_index);
  101. size_end = newStr.indexOf("}", size_begin);
  102. if (size_begin != -1 && size_end != -1) {
  103. // 尺寸内容
  104. size_searchValue = newStr.slice(size_begin, size_end + 1);
  105. let size_value = newStr.slice(size_begin + 1, size_begin + 3);
  106. let size_sub = size_searchValue.slice(4, size_searchValue.length - 1);
  107. if (size_sub) {
  108. let new_value = '<size = ' + size_value + '>' + size_sub + '</color>';
  109. newStr = newStr.replace(size_searchValue, new_value);
  110. }
  111. size_index = size_end;
  112. }
  113. else {
  114. break;
  115. }
  116. }
  117. return newStr;
  118. }
  119. }