Преамбула:
Имеются множество шаблонов строк как для вывода сообщений об ошибках, так и просто каких то фраз в диалоговых окнах.
Шаблон строки представляет из себя следующее: "Мама мыла {0} и гладила {1}, а потом еще разок помыла {0}. Наша мама {2}!".
Проблема:
Заменить параметры в шаблоне строки реальными значениями.
Решение:
Способ №1
Способ №2 (более монструозный и менее производительный)
Имеются множество шаблонов строк как для вывода сообщений об ошибках, так и просто каких то фраз в диалоговых окнах.
Шаблон строки представляет из себя следующее: "Мама мыла {0} и гладила {1}, а потом еще разок помыла {0}. Наша мама {2}!".
Проблема:
Заменить параметры в шаблоне строки реальными значениями.
Решение:
Способ №1
/** * Подстановка параметров в шаблон строки * @param source - шаблон строки * @param ...params - параметры, если первый параметр массив то параметры берутся от туда * @return */ public function replaceParams(source:String, ...params):String { if (!source || !params || !params.length) return source; if (params[0] is Array) params = params[0]; var regexp:RegExp = null; for (var i:int = 0; i < params.length; i++) { regexp = new RegExp("\\{" + i + "\\}", "g"); source = source.replace(regexp, params[i]); } return source; } // Пример: var source:String = "Мама мыла {0} и гладила {1}, а потом еще разок помыла {0}. Наша мама {2}!"; trace(replaceParams(source, "раму", "штаны", "молодец")); // or trace(replaceParams(source, ["раму", "штаны", "молодец"])); // выведет: Мама мыла раму и гладила штаны, а потом еще разок помыла раму. Наша мама молодец!Прим.: как оказалось такого рода функционал по подмене параметрами реализован в методе StringUtil.substitute(), о чем я узнал немного позже. Ну да ладно, свой велос ближе к телу :)
Способ №2 (более монструозный и менее производительный)
/** * Вставка массива параметров * @param str - шаблон строки * @param params - массив с параметрами * @return строка заполненная параметрами */ public static function insertParametersIntoString(str:String, params:Array):String { if (str == "" || str == null) throw new Error("Insert parameter in 'null' string. Target string = " + str + ". Number of parameter = " + params.length + ". Parameters = " + params.toString()); for (var i:int = 0; i < params.length; i++) { try { str = strInsertParameter(str, i, params[i].toString()); } catch (err:Error) { throw new Error("Insert null parameter in string. Target string = " + str + ". Number of parameter = " + i + ". Parameter = " + params[i].toString() + "Error: " + err); } } return str; } /** * Вставка параметра в указанную позицию * @param str - шаблон строки * @param paramIndex - индекс параметра в шаблоне * @param paramValue - значение параметра * @return строка заполненная параметрами */ public static function strInsertParameter(str:String, paramIndex:int, paramValue:String):String { var resultStr:String; var searchStr:String; var i:int; searchStr = "{" + paramIndex + "}"; i = str.lastIndexOf(searchStr); if (i == -1) return str; while (i != -1) { str = str.slice(0, i) + paramValue + str.slice(i + searchStr.length, str.length); i = str.indexOf(searchStr); } return str; } // Пример: var source:String = "Мама мыла {0} и гладила {1}, а потом еще разок помыла {0}. Наша мама {2}!"; trace(insertParametersIntoString(source, "раму", "штаны", "молодец")); // выведет: Мама мыла раму и гладила штаны, а потом еще разок помыла раму. Наша мама молодец!
Комментариев нет:
Отправить комментарий