在更改位置插入字符串

时间:2016-01-15 12:35:24

标签: c# string token

我绊倒了,我需要一些帮助。

我需要一种基于索引将子串插入更长字符串的方法。 不幸的是,随后的插入会使原始索引过时(因为字符串变得更长),我想知道是否有某种方法?

SELECT SUM(T1.QTY)
FROM INVENTTRANS T1
WHERE EXISTS
(
 SELECT 'x'
 FROM INVENTTABLE T2
 WHERE T2.ITEMID=T1.ITEMID
)

首次插入后,第二个索引将发生变化:

This is a hyperlink. And so is this.
          ^-------^            ^--^
         10      19           31  35

有没有人知道一个方法/库/算法来实现我想要的东西?

所以我神奇地可以插入,但仍然使用原始索引

4 个答案:

答案 0 :(得分:7)

从最高指数替换为最低指数。只有之后的 你要替换的内容会发生变化,所以如果从最高点开始,你可以保持相同的索引,一切都会被正确替换,不需要调整。如果你只需要通过字符串,这是一个非常简单的解决方案:)

This is a hyperlink. And so is this.
          ^-------^            ^--^
         10      19           31  35

This is a hyperlink. And so is My new hyperlink this.
          ^-------^            ^-------------------^
         10      19           31

This is a another hyperlink. And so is My new hyperlink this.
          ^---------------^            ^-------------------^
         10

答案 1 :(得分:1)

有多种方法可以解决这个问题;什么对你有用取决于你在一开始做什么。例如:

  • 如果您进行某种搜索以找到这些索引,那么解决此问题的一种好方法是迭代执行搜索。您可以搜索第一个,执行替换,然后从那里搜索下一个项目,而不是在任何替换之前立即查找所有索引。例如,一个简单的enum enumeration { ZERO, ONE, TWO, THREE = 13, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE }; 适用于此。

  • 如果您要进行实际替换,则可以将处理这些索引的工作留给正则表达式库。所以你只需做一个String.IndexOf()就可以自动工作,而不需要对索引做任何事情。如果您需要执行更复杂的替换,您还可以使用match evaluator delegate为每次替换运行代码。同样,在这种情况下,您无需手动调整字符串。

  • 如果你只有你需要替换的索引,一个常见的例子就是Twitter API返回的URL实体(因为Twitter告诉你链接在哪里,你需要在哪里进行替换) ,然后你可以通过拆分字符串来做到这一点。基本上,如果您有替换范围RegExp.Replace()[10, 19],那么您可以将字符串拆分为三个部分:[31, 35][0, 9][19, 30]。然后你只需将它们放在它们之间并将它们连接在一起以获得结果字符串。

答案 2 :(得分:0)

我要概括一下。如果你有一个更长的字符串,只要有一个变量,你可以用每次加法的长度来增加。

所以如果你有这个清单

Idices  - Substrings

1  -  "test" 
10 -  "link"
30 - "another test"

以及在int indexSum = 0等每个插入处递增的变量indexSum += substring.Length; 如果要在索引10处插入,实际上将插入10 + indexSum,indexSum将为indexSum+4

答案 3 :(得分:0)

编辑:Luaan的回答更有意义。除非您不能以这种方式订购列表,否则请使用他们的答案。

在一些结构化英语中:

Order the substrings to be inserted by the index
Insert the first substring
Increment the index of the rest of the substrings by the length of the first substring
Repeat

或者您可以保留一个记录所有插入文本长度的变量。这可能会更有效率。

只需将此变量添加到要插入的子字符串的索引中,然后按子字符串的长度递增变量