|    | 
СИ-БИ техника | КВ техника | УКВ техника | Радиоизмерения | Защита от TVI | Источники питания | Софт | Расчеты | Справочники
Главная arrow Программирование arrow Java arrow Манипуляции строковыми значениями  

Манипуляции строковыми значениями

Оглавление
Манипуляции строковыми значениями
Страница 2
Страница 3
Страница 4
Страница 5
Страница 4 из 5

Этот сценарий выведет на Web-страницу строку "Здравствуйте, Вася Пуп-кин".

document.write(jspsStringReplace("Текущий день - день", "день", "понедельник", 2));

Это выражение выведет на Web-страницу строку "Текущий день - понедельник". Обратите внимание — функция выполнит замену второй подстроки "день" в заданной строке, т. к. последним, необязательным, параметром, задающим номер заменяемой подстроки, было передано число 2.

Народ советует

Предусматривайте в своих функциях и методах необязательные параметры и подходящие значения по умолчанию для них. В конце концов, какие-либо сложные задачи выполняются программистом весьма редко — большей же частью они очень просты. Так, с помощью функции jspsStringReplace выполняется, в основном, замена единственной подстроки в строке, поэтому последний параметр, задающий номер заменяемой подстроки, сделан необязательным, принимающим значение по умолчанию 1.

Решение 2

Использование метода stringReplace (листинг 1.10) объекта string. Вот формат его вызова:

<Строка>.stringReplace(<Искомая подстрока>, <3аменяющая подстрока>[, <Номер вхождения искомой подстроки>]);

Листинг 1.10. Метод stringReplace объекта String, заменяющий заданную подстроку другой подстрокой

function mjspsStringReplace(searchSubstring, replaceSubstring, substringNumber) { var s1, s2, nSS = 1; var workString = new String(this); if (!substringNumber) substringNumber = 1; var nWSLen = workString.length; var nSSLen = searchSubstring.length; var nP = workString.indexOf(searchSubstring); while (nP != -1) {

if (nSS == substringNumber) {

s1 = workString.substring(0, nP) ;

s2 = workString.substring(nP + nSSLen, nWSLen);

workstring = s1 + replaceSubstring + s2; break; } nP = workstring.indexOf(searchSubstring, nP + 1) ; nSS++; } return workstring; }

String.prototype.stringReplace = mjspsStringReplace;

Пример

document.write("Текущий день - день".stringReplace("день", "понедельник", 2) ) ;

Замена всех подстрок в строке

Проблема

Функция jspsStringReplace и метод StringReplace объекта String позволяют

заменить только одно-единственное вхождение заданной подстроки. А если таких подстрок в строке несколько, и заменить нужно их все "хором"?

Решение 1

Использование функции jspsstringRepiaceAll (листинг 1.11), формат вызова которой приведен далее:

jspsstringRepiaceAll(<Строка>, <Искомая подстрока>, <3аменяющая подстрока>) ;

Назначение ее параметров понятно без объяснений. Функция возвращает обработанную строку, в которой все найденные вхождения искомой подстроки заменены на Заменяющую подстроку. Опять же, если Искомая подстрока В Строке не встретилась, возвращается неизмененная Строка.

Листинг 1.11. Функция jspsStringReplaceAll, заменяющая все заданные подстроки в строке. Немного измененный вариант функции, приведенной в [1]

function jspsstringRepiaceAll(workstring, searchSubstring, replaceSubstring)

{

var s1, s2;

var nWSLen = workstring.length;

var nSSLen = searchSubstring.length;

var nP = workstring.indexOf(searchSubstring);

while (nP !=-1) {

s1 = workString.substring(0, nP); s2 = workString.substring(nP + nSSLen, nWSLen); workString = s1 + replaceSubstring + s2; nP = workString.indexOf(searchSubstring); } return workString; }

Пример

var s = document.all["par"].innerHTML; s = jspsStringReplaceAllfs, "<B>", "<I>"); s = jspsStringReplaceAlKs, "</B>", "</I>"); document.all["par"].innerHTML = s;

Этот сценарий извлечет HTML-код, содержащийся внутри тега, имеющего значение атрибута id, равное "par", заменит в этом коде открывающие и закрывающие теги <B> на теги <I> снова поместит в этот тег.

Внимание!

Приведенный пример работает только в Microsoft Internet Explorer и Opera. Firefox не поддерживает свойство innerHTML.

Решение 2

Использование метода stringReplaceAll объекта string (листинг 1.12). Он имеет такой формат вызова:

<Строка>.stringReplaceAll{<Искомая подстрока>, <3аменяющая подстрока>);

Листинг 1.12. Метод stringReplaceAll объекта string, заменяющий все заданные подстроки в строке

function mjspsStringReplaceAll(searchSubstring, replaceSubstring) { var s1, s2;

var workString = new String(this);

var nWSLen = workString.length;

var nSSLen = searchSubstring.length;

var nP = workString.indexOf(searchSubstring);

while (nP != -1)

s4 = workString.substring(0, nP) ;

s2 = workString.substring(nP + nSSLen, nWSLen);

workString = s4 + replaceSubstring + s2; nP = workString.indexOf(searchSubstring); } return workString;

} String.prototype.stringReplaceAll = mjspsStringReplaceAll;

Пример

var s = document.all["par"].innerHTML; s = s.stringReplaceAll("<B>", "<I>"); s = s.stringReplaceAll("</B>", "</I>"); document.all["par"].innerHTML = s;

Внимание!

Приведенный пример работает только в Microsoft Internet Explorer и Opera. Fire-fox не поддерживает свойство innerHTML.

Форматированный вывод значений в строковом виде

Проблема

Имеется некоторая строка-шаблон и набор числовых и строковых значений. Можно ли расставить эти значения в нужных местах строки-шаблона?

Решение

Использовать функцию jspsFormatstr (листинг 1.13), формат вызова которой выглядит так:

jspsFormatstr{<Строка-шаблон>, <Массив значений>);

С первым параметром все понятно— в нем передается строка-шаблон. Вторым же параметром передается массив значений. Его элементы представляют собой значения, которые надо вставить в нужные места Строки-шаблона. Каждое из этих мест задается особым литералом (специальным символом), который включается в текст строки-шаблона. Литерал этот имеет такой вид: %s%.

Функция возвращает готовую строку, в нужные места которой вставлены значения, переданные в виде элементов Массива значений. Если элементов в массиве значений меньше, чем литералов, оставшиеся литералы будут удалены. Если же Массив значений содержит элементов больше, чем литералов в Строке-шаблоне, лишние элементы массива будут проигнорированы.


« Пред. - След. »


RLBN.ru - Электроника и компьютеры

0.1399
Hosted by uCoz