Форум 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=196613)

teamdima 27.03.2013 18:22

Преобразование строки в массив
 
Доброго времени суток. Есть такая задача:
есть строка
Код AS1/AS2:

var str:String = "05163864080712"

нужно из неё получить массив
Код AS1/AS2:

var result:Array = (5,16,38,64,8,7,12)

Я так понимаю нужно использовать str.split (","), но чё то не выходит...

Hauts 27.03.2013 18:26

indexOf для удаления первого нуля + split("")

Но получите числа 5 1 6 3 8 6 4 0 8 0 7 1 2.

Если попарно, то substr()

Код AS3:

var str:String = "05163864080712"
var arr:Array = [];
var length:int = str.length -2
for(var k:int = 0 ; k <length; k ++){
        var part:String = str.substr(k, 2);
        if(part.indexOf("0") == 0){
                part = part.substr(1, 1);
        }
        arr.push(Number(part))
}
trace(arr)


teamdima 27.03.2013 18:31

спасибо, но всё равно делаю видно что-то не так, потому что указываю делимитер запятую, а он трейсит и стринг и массив одинаково, без разделителей...

caseyryan 27.03.2013 18:47

здесь не нужно никаких делимитеров.
Делимитером является символ, или набор символов присутствующих в строке, а здесь запятых нет.

gagaga 27.03.2013 18:52

Цитата:

Сообщение от Hauts (Сообщение 1127041)
indexOf для удаления первого нуля + split("")

Но получите числа 5 1 6 3 8 6 4 0 8 0 7 1 2.

Если попарно, то substr()

Код AS3:

var str:String = "05163864080712"
var arr:Array = [];
var length:int = str.length -2
for(var k:int = 0 ; k <length; k ++){
        var part:String = str.substr(k, 2);
        if(part.indexOf("0") == 0){
                part = part.substr(1, 1);
        }
        arr.push(Number(part))
}
trace(arr)


Код AS3:

var str:String = "05163864080712"
var arr:Array = [];
 
for(var k:int = 0 ; k < str.length / 2; k += 2){
        var part:String = str.substr(k, 2);
        arr.push(parseInt(part, 10))
}
trace(arr)


Hauts 27.03.2013 18:55

gagaga, "5,16,38,64"

Смысл примерно тот же, как я понимаю (только k++ там должно быть), но по мне так лучше выносить length, а не просчитывать каждый раз.

teamdima 27.03.2013 19:36

хорошо, а почему не пушит остальные числа?
parseInt игнорирует числа начинающиеся на 0, но там есть ещё в конце "12"

Добавлено через 35 минут
всё, разобрался...
всем спасибо )

Wolsh 28.03.2013 01:49

Цитата:

Сообщение от caseyryan (Сообщение 1127045)
здесь не нужно никаких делимитеров.
Делимитером является символ, или набор символов присутствующих в строке, а здесь запятых нет.

Строго говоря, делиметер это паттерн, который может быть конкретным символом, но не обязан.
Код AS3:

                        var str:String = "05163864080712";
                        trace(str.replace(/(\d{2})/g, ",$&")); // ,05,16,38,64,08,07,12

То есть решить задачу можно, например, так
Код AS3:

                        var arr:Array = str.replace(/(\d{2})/g, ",$&").split(",");
                        arr.shift();
                        trace(arr);

Таким же регэкспом можно и разбить сразу в массив, только он будет "через один" )))
Код AS3:

var arr:Array = str.split(/(\d{2})/); // ,05,,16,,38,,64,,08,,07,,12,



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

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