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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.10.2008, 14:39
elzone вне форума Посмотреть профиль Отправить личное сообщение для elzone Найти все сообщения от elzone
  № 1  
Ответить с цитированием
elzone
[+3 02.07.08]
 
Аватар для elzone

Регистрация: Sep 2004
Сообщений: 86
По умолчанию замена символов в строке в определенном месте

здравствуйте.
такой вопрос:
С помощью какой конструкции можно в нужном месте в строке заменить один символ на другой.

есть строка: 1. Vertical loads apply on _ _ _ _.

нужно первый _ заменить на s
второй _ - на l
третий _ - на a
четвертый _ - на b

изменения производятся при нажатии клавиши на экранной клавиатуре.
при нажатии букв slab по порядку все работает нормально, но нужно чтобы буквы встввали на свое место при произольном нажатии этих букв. копал в хелпах, пока ничего не накопал.
может кто подскажет?

Старый 21.10.2008, 16:18
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Если по-нормальному, то я бы сделал какой-нибудь класс по типу шаблонизатора. Тоесть чтобы ему можно было скормить строчку "блаблабла %WORD_1% блабла %WORD_2%" и массив, где ключи берутся "WORD_1" и "WORD_2", а значения - сами слова. На него же взвалить все рассчёты, сколько там каких букв и на каких позициях они стоят. В итоге использование можно свести к заданию строчки и массива слов, и подписыванию на события клавиатуры, чтобы при вводе нужного символа ставить его на нужное место.
__________________
тонкий тролль, осеянный благодатью

Старый 21.10.2008, 16:24
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 3  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Код:
var reg:RegExp = /_/;
var string:String = 'Vertical loads apply on _ _ _ _.';
var arr:Array = ['s','l','a','b'];
var i:int;
while (reg.test(string)==true) 
string=string.replace(reg, arr[i++]);
trace(string);
Выдает
Vertical loads apply on s l a b.
Что б в произвольном порядке вставали на свое место нужно просто при нажатии одной из этих кнопочак просто заменять соответствующий символ и все.


Последний раз редактировалось Alex Lexcuk; 21.10.2008 в 16:28.
Старый 21.10.2008, 16:36
elzone вне форума Посмотреть профиль Отправить личное сообщение для elzone Найти все сообщения от elzone
  № 4  
Ответить с цитированием
elzone
[+3 02.07.08]
 
Аватар для elzone

Регистрация: Sep 2004
Сообщений: 86
to: Alex Lexcuk
спасибо, но это не подойдет. должна быть возможность замены в произвольном порядке

Старый 21.10.2008, 16:58
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код:
package 
{
	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	
	public class Main extends Sprite 
	{
		private var initStr:String = "Vertical loads apply on _ _ _ _";
		private var replaceChar:String = "_";
		private var targetStr:String = "slab";
		private var replaceMap:Object = { };
		private var tf:TextField = new TextField();
		public function Main():void 
		{
			var i:int = -1, j:int=0;
			while ((i = initStr.indexOf(replaceChar, i + 1)) > -1) 
			{
				replaceMap[targetStr.charAt(j++)] = i;
			}
		
			tf.autoSize = TextFieldAutoSize.LEFT;
			tf.text = initStr;
			addChild(tf);
			
			stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
		}
		
		private function keyDownHandler(event:KeyboardEvent):void 
		{
			var char:String = String.fromCharCode(event.charCode);
			
			if (replaceMap[char]) 
			{
				var i:int = replaceMap[char];
				tf.text = tf.text.substr(0, i) + char + tf.text.substr(i + 1);
				delete replaceMap[char];
			}
		}
		
	}
}
ага, будет работать только если заменяемые символы все разные, для повторов будет посложнее, но не сильно


Последний раз редактировалось silin; 21.10.2008 в 17:06.
Старый 21.10.2008, 17:03
flash33 вне форума Посмотреть профиль Отправить личное сообщение для flash33 Найти все сообщения от flash33
  № 6  
Ответить с цитированием
flash33
 
Аватар для flash33

Регистрация: Nov 2005
Сообщений: 1,155
Код:
function _replace(str, toReplace, letters):String {
	var _pos = [];
	for (var i = 0; i<str.length; i++) {
		if (str.charAt(i) == toReplace) {
			_pos.push(i);
		}
	}
	for (var j = 0; j<letters.length; j++) {
		str = str.substring(0, _pos[j])+letters[j]+str.substring(_pos[j]+1);
	}
	trace(str);
	return str;
}
//_replace(str, toReplace, letters) - 
//str - строка какую изменяем
//toReplace - символ замены
//letters - массив с символами для замены с нужным порядком
//Замена всех символов
_replace("_ папа _ Васи силен _ математике", "_", ["А", "у", "в"]);
//trace : А папа у Васи силен в математике

//Замена произвольного символа
_replace("_ папа _ Васи силен _ математике", "_", ["_", "у", "_"]);
//trace : _ папа у Васи силен _ математике

Старый 21.10.2008, 17:03
elzone вне форума Посмотреть профиль Отправить личное сообщение для elzone Найти все сообщения от elzone
  № 7  
Ответить с цитированием
elzone
[+3 02.07.08]
 
Аватар для elzone

Регистрация: Sep 2004
Сообщений: 86
to: silin and flash33
respect!!! спасибо, то что надо!!!

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

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

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


 


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


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