AS2 String Заменить для массива символов? - PullRequest
1 голос
/ 06 августа 2009

У меня есть функция, которая прекрасно работает в ActionScript 2, за исключением того, что она может заменить только один символ. Мне нужно, чтобы он вел себя больше как str_replace в PHP и заменял массив символов.

Вот код, который у меня сейчас есть, он просто заменяет пробел () дефисом (-) в строке.

function str_replace(str){
    return str.split(" ").join("-");
}

Я пытаюсь заменить пробелы, запятые и комбинации символов (например, пробел и запятая) в строках ActionScript для использования в URL.

Итак, это:

Shop, Dine, Play

станет таким:

Shop-Dine-Play

Любые предложения с благодарностью! :)

Ответы [ 4 ]

1 голос
/ 10 августа 2009

Для вашего случая самый простой способ - выполнить последовательность команд разделения / объединения в порядке замены от самой длинной до самой короткой.

например.,

txt = txt.split(", ").join(-)

txt = txt.split(",").join(-)

txt = txt.split(" ").join(-)

Чтобы вы не получили Shop - Dine - Play, вы заменяете "," сначала, затем "," или "".

0 голосов
/ 22 октября 2009

@ Райан - мой комментарий потерял все форматирование, так что вот оно снова. И я только что понял, что это та же самая функция str_replace, которую я изначально предоставил. но это работает!

as2 или as3? В любом случае, вы можете просто вызвать функцию str_replace() с вашим динамическим текстом в качестве параметра внутри функции onPress() в AS2 или щелкнуть прослушиватель в AS3. На самом деле я не тестировал часть str_replace в AS3, но она должна работать - пример ниже.

private var newString:String; 

// elsewhere in your document
private function str_replace(str:String):String { 
  return str.split(" ").join("-"); 
} 
private function textClickListener(e:MouseEvent) { 
   if(e.target is TextField){ 
      newString = str_replace(e.target.text); 
      trace(newString); // outputs theTextField.text; 
   }
} 
theTextField.addEventListener(MouseEvent.CLICK, textClickListener); 
// this assumes you have a dynamic text field named 'theTextField'
0 голосов
/ 07 августа 2009

Если вы хотите заменить массив символов другим массивом символов, вы можете сделать что-то вроде

function replace(str:String, toFind:Array, toReplace:Array):String
{
    if(toFind.length != toReplace.length)
        throw new Error("Error : Find and replace array must match in length");


    for(var i:Number = 0; i < toFind.length; i++)
    {
        str = str.split(toFind[i]).join(toReplace[i]);
    }

    return str;
}

И используйте это так:

replace("abc", ["a", "b", "c"], ["c", "b", "a"]);   //result cba

Обратите внимание, что это действительно не оптимально, если вы хотите заменить много символов в длинной строке.

0 голосов
/ 07 августа 2009

Это у вас работает?

function replace(txt:String, fnd:String, rep:String):String
{
    return txt.split(fnd).join(rep);
}

trace(replace("Shop, Dine, Play", ", ", "-"));//Shop-Dine-Play

т.е. искомая строка может содержать более одного символа, в данном случае ","

...