Javascript разделить строку на 160 символов и добавить счетчик? - PullRequest
3 голосов
/ 10 августа 2011

Я хочу разбить строку на несколько строк по 160 символов, которые мне показались достаточно простыми var splits = myString.split(160);

но, видимо, это все равно не работает.

Другой момент заключается в том, что я хочу добавить счетчик (стиль sms для Android).

Допустим, у нас есть пример строки (237 символов)

Привет, это сообщение имеет длину 237 символов, что делает его для одного сообщения эта строка будет разбита на несколько сообщения ... это на самом деле для приложения смс, следовательно, причина нам нужно разбить строку.

Окончательный результат должен быть

Привет, это сообщение имеет длину 237 символов, что делает его длинным для одного сообщение, эта строка будет разбита на несколько сообщений ... thi (1/2)
<ч /> Строка будет разбита на несколько сообщения ... это на самом деле для приложения смс, следовательно, причина нам нужно разбить строку. (2/2)

Теперь, если бы всегда было 9 или меньше сообщений, я мог бы просто сделать

//ok, so the next line won't work, but it gets the point across...
var splits = mystring.split(155);
var s = splits.length;
for(var i = 0; i < s; i++)
  splits[i] += '('+(i+1)+'/'+s+')';

но проблема в том, что может быть где-то до 15 сообщений, поэтому количество символов, добавляемых в конце, является непоследовательным (мы хотим, чтобы количество символов было как можно ниже, чтобы 0 заполненных чисел меньше 10 не было опция).

Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

http://jsfiddle.net/Lobstrosity/nwaYe/

Он будет обрезан до 160 * 15 символов (поскольку вы подразумевали, что 15 было пределом).Он устанавливает оба этих числа как переменные вверху, так что вы можете играть с любым из них.

Обновление

Новая скрипка: http://jsfiddle.net/Lobstrosity/nwaYe/2/

Это уродливо ... но этоработает ...

  1. Выясняет, будет ли y в (x/y) одной или двумя цифрами.
  2. При построении используется заполнитель в индикаторахфактическое сообщение.
  3. Он заменяет заполнители.
  4. Наконец, он разделяется на charLimit.

Я надеюсь, что кто-то другой найдет более чистый способсделай это ...

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

Я думаю, что вашим лучшим выбором для получения оптимальных сообщений (то есть максимальной длины) может быть обработка каждого класса максимальной длины сообщения отдельно.

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

Вот пример кода:

if (mystring.length < (155 * 9)) {
    var splits = mystring.split(155);
    var s = splits.length;
    for(var i = 0; i < s; i++)
        splits[i] += '('+(i+1)+'/'+s+')';
} else if (mystring.length < (154*9)+(153 * 90)) {
    var splits1 = mystring.substr(0,154*9).split(154);
    var splits2 = mystring.substr(154*9).split(153);
    var splits = [];
    var s = splits1.length + splits2.length;
    for (var i = 0; i < splits1.length; i++)
        splits[i] = splits1[i] + '('+(i+1)+'/'+s+')';
    for (var i = 10; i < splits2.length+10; i++)
        splits[i] = splits2[i-10] + '('+(i+1)+'/'+s+')';    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...