Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.09.2014, 14:08
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 11  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Медленный, но менее морочный вариант
Код AS3:
var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
 
var len:int = arr.length;
for(var i:int = 0; i < len; i++) {
	str = str.split("{" + i + "}").join(arr[i]);
}
 
trace(str);
1000000 выполнений ~ 10 секунд (вариант SlavaRa ~ 4 секунды)


Последний раз редактировалось MikroAcse; 06.09.2014 в 21:37.
Старый 06.09.2014, 17:44
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 12  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Небольшой тестик по теме
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.utils.getTimer;
	import flash.utils.setTimeout;
 
	/**
	 * @author SlavaRa
	 */
	public class Main extends Sprite {
 
		public static const COUNT:int = 1000000;
 
		public function Main() {
			super();
			_field = new TextField();
			_field.width = 800;
			_field.height = 600;
			addChild(_field);
			setTimeout(runTests, 1000);
		}
 
		private function runTests():void {
			//var str:String;
			//var arr:Array;
			//arr = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			//str = "Привет %s, тебе сегодня исполнилось %d %s. Сегодня в %s день могут смотреть не %s.";
			//trace(str.replace(/%s|%d/g, function(substr:String, i:uint, str:String):String {
				//switch(substr) {
					//case "%s": return arr.shift();
					//case "%d": return arr.shift();
				//}
			//}));//Привет Юзернейм, тебе сегодня исполнилось 4 года. Сегодня в завтрашний день могут смотреть не только лишь все.
			//arr = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			//str = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
			//var len:int = arr.length;
			//for(var i:int = 0; i < len; i++) {
				//str = str.split("{" + i + "}").join(arr[i]);
			//}
			//trace(str);
			//Привет Юзернейм, тебе сегодня исполнилось 4 года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!
			//var args:Vector.<String> = new <String>["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			//str = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
			//var length:int = args.length;
			//for(var i:int = 0; i < length; i++) {
				//var pattern:String = "{" + i + "}";
				//while(str.indexOf(pattern) != -1) {
					//str = str.replace(pattern, args[i]);
				//}
			//}
			//trace(str);
			//Привет Юзернейм, тебе сегодня исполнилось 4 года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!
			testNubideus();//testNubideus:13652
			testMikroAcse();//testMikroAcse:9039
			testSlavaRa();//testSlavaRa:3495
		}
 
		private var _field:TextField;
 
		private function testNubideus():void {
			var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var str:String = "Привет %s, тебе сегодня исполнилось %d %s. Сегодня в %s день могут смотреть не %s. Не скучай, {0}!";
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				str.replace(/%s|%d/g, function(substr:String, i:uint, str:String):String {
					switch(substr) {
						case "%s": return arr.shift();
						case "%d": return arr.shift();
					}
				});
			}
			_field.appendText("\ntestNubideus:" + (getTimer() - stamp));
		}
 
		private function testMikroAcse():void {
			var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var len:int = arr.length;
				for(var i:int = 0; i < len; i++) {
					str = str.split("{" + i + "}").join(arr[i]);
				}
			}
			_field.appendText("\ntestMikroAcse:" + (getTimer() - stamp));
		}
 
		private function testSlavaRa():void {
			var args:Vector.<String> = new <String>["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var length:int = args.length;
				for(var i:int = 0; i < length; i++) {
					var pattern:String = "{" + i + "}";
					while(str.indexOf(pattern) != -1) {
						str = str.replace(pattern, args[i]);
					}
				}
			}
			_field.appendText("\ntestSlavaRa:" + (getTimer() - stamp));
		}
	}
}
из теста видно, код от Nubideus выполняется с ошибкой(по-моему где-то я такое видел)

UPD1:
самый быстрый Inline вариант, стабильно 4 сек. на миллион
Код AS3:
[Inline]
public static function format(source:String, args:Vector.<String>):String {
	for(var i:int = args.length; --i >= 0; ) {
		var pattern:String = "{" + i + "}";
		label: if(source.indexOf(pattern) != -1) {
			source = source.replace(pattern, args[i])
			goto label;
		}
	}
	return source;
}
__________________
местонахождение


Последний раз редактировалось СлаваRa; 06.09.2014 в 23:11.
Старый 06.09.2014, 22:23
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 13  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Код AS3:
class StringUtils
{
	private static const regExp:RegExp = /{(\w)}/g;
	private static var repl:Array;
 
	public static function format (source:String, ... args):String
	{
		repl = args;
		return source.replace(regExp, replaceFunc);
	}
 
	private static function replaceFunc (substr:String, group:int, i:uint, str:String):String
	{
		return repl[group];
	}
}
var result:String = StringUtils.format("Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!", "Юзернейм", "4", "года", "завтрашний", "только лишь все");
так симпатичнее

testSlavaRa:8746
testNooob:8163

Старый 06.09.2014, 22:43
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 14  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
тест вашего и моего кода, в release(миллион итераций)
testSlavaRa:4100
testNooob:20680

все 4 теста с вашим кодом падают по таймауту

UPD1: + ваш спокойно себе заменит и {a}, {b}, {c}, ... чего делать не должен(
__________________
местонахождение


Последний раз редактировалось СлаваRa; 06.09.2014 в 22:54.
Старый 06.09.2014, 22:54
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 15  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Цитата:
код от Nubideus выполняется с ошибкой
ошибка то где?
>Сегодня в %s день могут смотреть не %s. Не скучай, {0}!
>Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, {0}!
тут ошибка в том, что ты не тот код скопировал.
ну и в регекспе лишний плюсик /{[0-9]+}+/g, но и с ним работает, так что не стал править

вы не сможете отладить, если в строке будет {n}, где n больше или равно arg.length, по идее должно выдавать range error. я этого не учел потому что пофиг ваще
например "asd asd {9999} sad"

Старый 06.09.2014, 22:56
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 16  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Извиняюсь, да.. мой косяк, исправил сообщение.
__________________
местонахождение

Старый 06.09.2014, 22:58
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 17  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
ну ещёб, у тебя там ошибки в коде, в следующей итерации str будет уже старый и поэтому будет работать быстрее.
если уж инлайнить то
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.utils.getTimer;
	import flash.utils.setTimeout;
 
	/**
	 * @author SlavaRa
	 */
	public class Main extends Sprite
	{
		public static const COUNT:int = 1000000;
 
		public function Main ()
		{
			super();
			_field = new TextField();
			_field.width = 800;
			_field.height = 600;
			addChild(_field);
			setTimeout(runTests, 1000);
		}
 
		private function runTests ():void
		{
			testNubideus(); //testNubideus:7695
			testMikroAcse(); //testMikroAcse:10034
			testSlavaRa(); //testSlavaRa:7824
			testNooob(); //testNooob:7493
		}
 
		private var _field:TextField;
 
		private function testNubideus ():void
		{
			var str:String    = "Привет %s, тебе сегодня исполнилось %d %s. Сегодня в %s день могут смотреть не %s. Не скучай, {0}!";
			var func:Function = function (substr:String, i:uint, str:String):String {
				switch (substr) {
					case "%s": {return arr.shift();}
					case "%d": {return arr.shift();}
				}
			};
			var regexp:RegExp = /%s|%d/g;
			var stamp:int     = getTimer();
			for (var j:int = 0; j < COUNT; j++)
			{
				var arr:Array     = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
				var result:String = str.replace(regexp, func);
			}
			_field.appendText("\ntestNubideus:" + (getTimer() - stamp));
		}
 
		private function testMikroAcse ():void
		{
			var arr:Array  = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
			var stamp:int  = getTimer();
			for (var j:int = 0; j < COUNT; j++)
			{
				var result:String = str;
				var len:int       = arr.length;
				for (var i:int = 0; i < len; i++)
				{
					result = result.split("{" + i + "}").join(arr[i]);
				}
			}
			_field.appendText("\ntestMikroAcse:" + (getTimer() - stamp));
		}
 
		private function testSlavaRa ():void
		{
			var args:Vector.<String> = new <String>["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var str:String           = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
			var stamp:int            = getTimer();
			for (var j:int = 0; j < COUNT; j++)
			{
				var result:String = str;
				var length:int    = args.length;
				for (var i:int = 0; i < length; i++)
				{
					var pattern:String = "{" + i + "}";
					while (result.indexOf(pattern) != -1)
					{
						result = result.replace(pattern, args[i]);
					}
				}
			}
			_field.appendText("\ntestSlavaRa:" + (getTimer() - stamp));
		}
 
		private function testNooob ():void
		{
			var args:Vector.<String> = new <String>["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var str:String           = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
			var regExp:RegExp        = /{(\w)}/g;
			var replaceFunc:Function = function (substr:String, group:int, i:uint, str:String):String
			{
				return args[group];
			}
 
			var stamp:int            = getTimer();
			for (var j:int = 0; j < COUNT; j++)
			{
				var result:String = str.replace(regExp, replaceFunc);
			}
			_field.appendText("\ntestNooob:" + (getTimer() - stamp));
		}
	}
}

Старый 06.09.2014, 23:09
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 18  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.utils.getTimer;
	import flash.utils.setTimeout;
 
	/**
	 * @author SlavaRa
	 */
	public class Main extends Sprite {
 
		public static const COUNT:int = 1000000;
 
		public function Main() {
			super();
			_field = new TextField();
			_field.width = 800;
			_field.height = 600;
			addChild(_field);
			setTimeout(runTests, 1000);
		}
 
		private function runTests():void {
			testNubideus();//testNubideus:27352
			testMikroAcse();//testMikroAcse:33144
			testSlavaRa();//testSlavaRa:23775
			testNooob();//testNooob:26051
		}
 
		private var _field:TextField;
 
		private function testNubideus():void {
			var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет %s, тебе сегодня исполнилось %d %s. Сегодня в %s день могут смотреть не %s. Не скучай, %s!";
				str.replace(/%s|%d/g, function(substr:String, i:uint, str:String):String {
					switch(substr) {
						case "%s": return arr.shift();
						case "%d": return arr.shift();
					}
				});
			}
			_field.appendText("\ntestNubideus:" + (getTimer() - stamp));
		}
 
		private function testMikroAcse():void {
			var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
				var len:int = arr.length;
				for(var i:int = 0; i < len; i++) {
					str = str.split("{" + i + "}").join(arr[i]);
				}
			}
			_field.appendText("\ntestMikroAcse:" + (getTimer() - stamp));
		}
 
		private function testSlavaRa():void {
			var args:Vector.<String> = new <String>["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
				str = StringTool.format(str, args);
			}
			_field.appendText("\ntestSlavaRa:" + (getTimer() - stamp));
		}
 
		private function testNooob():void {
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
				str = StringUtils.format(str, "Юзернейм", "4", "года", "завтрашний", "только лишь все");
			}
			_field.appendText("\ntestNooob:" + (getTimer() - stamp));
		}
	}
 
}
 
class StringTool {
	[Inline]
	public static function format(source:String, args:Vector.<String>):String {
		for(var i:int = args.length; --i >= 0; ) {
			var pattern:String = "{" + i + "}";
			label: if(source.indexOf(pattern) != -1) {
				source = source.replace(pattern, args[i]);
				goto label;
			}
		}
		return source;
	}
}
 
class StringUtils
{
	private static const regExp:RegExp = /{(\w)}/g;
	private static var repl:Array;
 
	public static function format(source:String, ...args):String
	{
		repl = args;
		return source.replace(regExp, replaceFunc);
	}
 
	private static function replaceFunc(substr:String, group:int, i:uint, str:String):String
	{
		return repl[group];
	}
}
testNubideus:27352
testMikroAcse:33144
testSlavaRa:23775
testNooob:26051

зы
зачем надо было править мое форматирование?
__________________
местонахождение

Старый 07.09.2014, 01:34
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 19  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
x10000
testNubideus:141
testMikroAcse:227
testSlavaRa:174
testNooob:173

> Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!
> Привет Юзернейм, тебе сегодня исполнилось 4 года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!

> {1{2}{3}{1}}
> {1годазавтрашний4}

> }{}{}{}{}{}{}{}[[[[]}{{}}]]}}{
> }{}{}{}{}{}{}{}[[[[]}{{}}]]}}{

testSlavaRa:
> "{{1}}", ["Юзернейм", "0", "года", "завтрашний", "только лишь все"]
> Юзернейм // wat

testMikroAcse:
>Привет {0}, тебе сегодня исполнилось {{1}} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!
>Привет Юзернейм, тебе сегодня исполнилось только лишь все года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!

testNooob: жааль что там только от 0 до 9, плюсик дает всего дополнительные 5% времени

Код AS3:
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.utils.getTimer;
	import flash.utils.setTimeout;
 
	/**
	 * @author SlavaRa
	 */
	public class Main extends Sprite {
 
		public static const COUNT:int = 10000;
 
		public function Main() {
			super();
			_field = new TextField();
			_field.width = 800;
			_field.height = 600;
			addChild(_field);
			setTimeout(runTests, 1000);
		}
 
		private function runTests():void {
			testNubideus();//testNubideus:27352
			testMikroAcse();//testMikroAcse:33144
			testSlavaRa();//testSlavaRa:23775
			testNooob();//testNooob:26051
		}
 
		private var _field:TextField;
 
		private function testNubideus():void {
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
 
				var result:String = "";
				var openIndex:int = -1;
				var closeIndex:int = -1;
				parse: while (true) {
					openIndex = str.indexOf("{", openIndex + 1);
					if (openIndex !== -1) {
						sl: for (var i:uint = openIndex + 1; i < str.length; i++ ) {
							switch(str.charAt(i)) {
								case "0": case "1":
								case "2": case "3":
								case "4": case "5":
								case "6": case "7":
								case "8": case "9":
									continue;
								case "}":
									break sl;
								default:
									continue parse;
							}
						}
						if(openIndex + 1 < i){
							var substr:String = str.substring(openIndex + 1, i);
							result += str.substring(closeIndex + 1, openIndex) + arr[uint(substr)];
							closeIndex = i;
						}
					}else {
						result += str.substring(closeIndex + 1, str.length);
						break;
					}
				}
			}
			_field.appendText("\ntestNubideus:" + (getTimer() - stamp));
		}
 
		private function testMikroAcse():void {
			var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
				var len:int = arr.length;
				for(var i:int = 0; i < len; i++) {
					str = str.split("{" + i + "}").join(arr[i]);
				}
			}
			_field.appendText("\ntestMikroAcse:" + (getTimer() - stamp));
		}
 
		private function testSlavaRa():void {
			var args:Vector.<String> = new <String>["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
				str = StringTool.format(str, args);
			}
			_field.appendText("\ntestSlavaRa:" + (getTimer() - stamp));
		}
 
		private function testNooob():void {
			var stamp:int = getTimer();
			for (var j:int = 0; j < COUNT; j++) {
				var str:String = "Привет {0}, тебе сегодня исполнилось {1} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
				str = StringUtils.format(str, "Юзернейм", "4", "года", "завтрашний", "только лишь все");
			}
			_field.appendText("\ntestNooob:" + (getTimer() - stamp));
		}
	}
 
}
 
class StringTool {
	[Inline]
	public static function format(source:String, args:Vector.<String>):String {
		for(var i:int = args.length; --i >= 0; ) {
			var pattern:String = "{" + i + "}";
			label: if(source.indexOf(pattern) != -1) {
				source = source.replace(pattern, args[i]);
				goto label;
			}
		}
		return source;
	}
}
 
class StringUtils
{
	private static const regExp:RegExp = /{(\w)}/g;
	private static var repl:Array;
 
	public static function format(source:String, ...args):String
	{
		repl = args;
		return source.replace(regExp, replaceFunc);
	}
 
	private static function replaceFunc(substr:String, group:int, i:uint, str:String):String
	{
		return repl[group];
	}
}
+ без проверки на число, 115 мсек
ищет "{", потом ищет первую попавшуюся "}", arr[все что между ними].
если между ними ничего нет, то вставляется {}.
Код AS3:
var arr:Array = ["Юзернейм", "года", "завтрашний", "только лишь все"];
var str:String = "Привет {0}, тебе сегодня исполнилось {length} {1}. Сегодня в {2} день могут смотреть не {3}. Не скучай, {0}!";
 
var result:String = "";
var openIndex:int = -1;
var closeIndex:int = -1;
while (true) {
	openIndex = str.indexOf("{", closeIndex + 1);
	if (openIndex !== -1) {
		var i:int = str.indexOf("}", openIndex + 1);
		if (i === -1) {
			break;
		}
		if(openIndex + 1 < i){
			var substr:String = str.substring(openIndex + 1, i);
			result += str.substring(closeIndex + 1, openIndex) + arr[substr];
		}else {
			result += "{}";
		}
		closeIndex = i;
	}else break;
}
result += str.substring(closeIndex + 1, str.length);
trace(result); // Привет Юзернейм, тебе сегодня исполнилось 4 года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!


Последний раз редактировалось nubideus; 07.09.2014 в 02:16.
Старый 07.09.2014, 03:40
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 20  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Вам делать нечего или как? Что это за экозитка в каждой теме, если нужно ПРОСТО решить поставленную задачу?

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:00.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:00.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.