Вставить символ в строку по указанному индексу - PullRequest
0 голосов
/ 05 августа 2009

Итак, у меня есть массив индексов символов в строке, в который я хочу вставить символ раньше, как мне легко вставить символ перед каждым индексом? Так, например:

"Большая коричневая лиса ..."

должности массив = 4,9

символ для вставки ','

результат: "Большая коричневая лиса ..."

Существует ли метод, обеспечивающий такую ​​простую утилиту?

String.insert (originalStr, index, stringToInsert), например ???


Обновление

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

orginalText = "некоторый текст с такими символами, как;:} <" </p>

, в который я, возможно, захочу вставить «\» с результатом:

result = "некоторый текст с такими символами, как \;:} \ <" </p>

Ответы [ 5 ]

2 голосов
/ 05 августа 2009

Это глупо и немного срочно, но попробуйте это:

Dim sString: sString = "the something something"
Dim position: position = 1
Dim character: character = "F"
if position = 0 then
    sString = character + Left(Mid(sString, 1), Len(sString) + 1)
else
    sString = Left(sString, position) + character + Left(Mid(sString, position), Len(sString) - position + 1)
end if
1 голос
/ 05 августа 2009

Предполагая, что индексы отсортированы, выполните цикл в обратном направлении и вставьте каждый символ.

For lngPos = UBound(alngPositions) to 0 step -1
   strText = Left(strText, alngPositions(lngPos) - 1) + "," + Mid(strText, alngPositions(lngPos))
Next

Обратите внимание, что с вашими примерами он, конечно, выдаст строку "Большая коричневая лиса ...". Индексы не добавляются предварительно, чтобы соответствовать позиции в результирующей строке, не так ли?

Edit:
Альтернативой, которая была бы быстрее для больших строк, является разделение строки в позициях индекса на массив, а затем соединение строк с запятыми между:

Dim astrSubstrings(UBound(alngPositions) + 1)
lngLeft = 1
For lngPos = 0 to UBound(alngPositions)
   astrSubstrings(lngPos) = Mid(strText, lngLeft, alngPositions(lngPos) - lngLeft)
   lngLeft = alngPositions(lngPos)
Next
astrSubstrings(UBound(alngPositions) + 1) = Mid(strText, lngLeft)
strText = Join(astrSubstrings, ",")
0 голосов
/ 05 августа 2009

Вы должны иметь возможность использовать функцию разбиения на основе пробела между словами - это вернет массив слов. Затем вы ставите запятую после каждого элемента в массиве, и вы можете получить нужную строку. Пример здесь http://www.w3schools.com/VBscript/func_split.asp

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

Это было какое-то время, но Mid (str, start, [end]) мог бы пойти.

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

Я не классический пользователь ASP, но вы можете использовать подстроку, чтобы получить часть строки до индекса, где вам нужно вставить символ, подставить другую часть строки и взять эти две части и построить новая строка выполняет part1 & "," & part2.

Надеюсь, это поможет.

...