Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   замена символов в строке в определенном месте (http://www.flasher.ru/forum/showthread.php?t=117189)

elzone 21.10.2008 14:39

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

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

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

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

Gaen 21.10.2008 16:18

Если по-нормальному, то я бы сделал какой-нибудь класс по типу шаблонизатора. Тоесть чтобы ему можно было скормить строчку "блаблабла %WORD_1% блабла %WORD_2%" и массив, где ключи берутся "WORD_1" и "WORD_2", а значения - сами слова. На него же взвалить все рассчёты, сколько там каких букв и на каких позициях они стоят. В итоге использование можно свести к заданию строчки и массива слов, и подписыванию на события клавиатуры, чтобы при вводе нужного символа ставить его на нужное место.

Alex Lexcuk 21.10.2008 16:24

Код:

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.
Что б в произвольном порядке вставали на свое место нужно просто при нажатии одной из этих кнопочак просто заменять соответствующий символ и все.

elzone 21.10.2008 16:36

to: Alex Lexcuk
спасибо, но это не подойдет. должна быть возможность замены в произвольном порядке

silin 21.10.2008 16:58

Код:

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];
                        }
                }
               
        }
}

ага, будет работать только если заменяемые символы все разные, для повторов будет посложнее, но не сильно

flash33 21.10.2008 17:03

Код:

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 : _ папа у Васи силен _ математике


elzone 21.10.2008 17:03

to: silin and flash33
respect!!! спасибо, то что надо!!!


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

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