|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+3 02.07.08]
Регистрация: Sep 2004
Сообщений: 86
|
замена символов в строке в определенном месте
здравствуйте.
такой вопрос: С помощью какой конструкции можно в нужном месте в строке заменить один символ на другой. есть строка: 1. Vertical loads apply on _ _ _ _. нужно первый _ заменить на s второй _ - на l третий _ - на a четвертый _ - на b изменения производятся при нажатии клавиши на экранной клавиатуре. при нажатии букв slab по порядку все работает нормально, но нужно чтобы буквы встввали на свое место при произольном нажатии этих букв. копал в хелпах, пока ничего не накопал. может кто подскажет? |
|
|||||
strange mood
|
Если по-нормальному, то я бы сделал какой-нибудь класс по типу шаблонизатора. Тоесть чтобы ему можно было скормить строчку "блаблабла %WORD_1% блабла %WORD_2%" и массив, где ключи берутся "WORD_1" и "WORD_2", а значения - сами слова. На него же взвалить все рассчёты, сколько там каких букв и на каких позициях они стоят. В итоге использование можно свести к заданию строчки и массива слов, и подписыванию на события клавиатуры, чтобы при вводе нужного символа ставить его на нужное место.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
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. |
|
|||||
[+3 02.07.08]
Регистрация: Sep 2004
Сообщений: 86
|
to: Alex Lexcuk
спасибо, но это не подойдет. должна быть возможность замены в произвольном порядке |
|
|||||
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. |
|
|||||
Регистрация: 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 : _ папа у Васи силен _ математике |
|
|||||
[+3 02.07.08]
Регистрация: Sep 2004
Сообщений: 86
|
to: silin and flash33
respect!!! спасибо, то что надо!!! |
Часовой пояс GMT +4, время: 00:00. |
|
« Предыдущая тема | Следующая тема » |
|
|