Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在变换位置插入字符串_C#_String_Token - Fatal编程技术网

C# 在变换位置插入字符串

C# 在变换位置插入字符串,c#,string,token,C#,String,Token,我绊倒了,需要帮助 我需要一种基于索引将子字符串插入较长字符串的方法。 不幸的是,随后的插入会使原始索引过时(字符串变长),我想知道是否有办法解决这个问题 This is a hyperlink. And so is this. ^-------^ ^--^ 10 19 31 35 第一次插入后,第二个索引将更改: This is a <a href="#">hyperlink. And s

我绊倒了,需要帮助

我需要一种基于索引将子字符串插入较长字符串的方法。 不幸的是,随后的插入会使原始索引过时(字符串变长),我想知道是否有办法解决这个问题

This is a hyperlink. And so is this.
          ^-------^            ^--^
         10      19           31  35
第一次插入后,第二个索引将更改:

This is a <a href="#">hyperlink. And so is this.
                                           ^--^
                              31          43  47
这是一个超链接。这也是。
^--^
31          43  47
有人知道实现我想要的方法/库/算法吗


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

我要概括一下。如果您有一个较长的字符串,只需使用一个变量,该变量随每次加法的长度递增

所以如果你有这个清单

Idices  - Substrings

1  -  "test" 
10 -  "link"
30 - "another test"
变量
int indexSum=0
,在每次插入时递增,如
indexSum+=substring.Length

当您想在索引10处插入时,实际上会插入10+索引sum,而索引sum将是
indexSum+4

我将进行概括。如果您有一个较长的字符串,只需使用一个变量,该变量随每次加法的长度递增

所以如果你有这个清单

Idices  - Substrings

1  -  "test" 
10 -  "link"
30 - "another test"
变量
int indexSum=0
,在每次插入时递增,如
indexSum+=substring.Length

当您想在索引10处插入时,实际上会插入10+索引sum,索引sum将从最高索引替换为最低索引。只有替换后的索引才会发生变化,因此如果从最高索引开始,则可以保留相同的索引,所有内容都将正确替换,无需调整。如果只需要对字符串进行一次遍历,这是一个非常简单的解决方案:)


从最高索引替换为最低索引。只有替换后的索引才会发生变化,因此如果从最高索引开始,则可以保留相同的索引,所有内容都将正确替换,无需调整。如果只需要对字符串进行一次遍历,这是一个非常简单的解决方案:)


编辑:卢安的回答更有意义。除非你不能按顺序排列,否则就用他们的答案

在一些结构化英语中:

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
或者,您可以保留一个记录所有插入文本长度的变量。这可能会更有效率


只需将此变量添加到正在插入的子字符串的索引中,然后将变量增加子字符串的长度即可编辑: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
或者,您可以保留一个记录所有插入文本长度的变量。这可能会更有效率


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

解决此问题的方法有多种;什么对你有效取决于你在做什么。例如:

  • 如果您执行某种搜索来查找这些索引,那么解决这个问题的一个好方法是迭代执行搜索。您可以搜索第一个索引,执行替换,然后从那里搜索下一个项目,而不是在任何替换之前一次查找所有索引。例如,一个简单的
    String.IndexOf()
    可以很好地解决这个问题

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

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


    • 解决这个问题有多种方法;什么对你有效取决于你在做什么。例如:

      • 如果您执行某种搜索来查找这些索引,那么解决这个问题的一个好方法是迭代执行搜索。您可以搜索第一个索引,执行替换,然后从那里搜索下一个项目,而不是在任何替换之前一次查找所有索引。例如,一个简单的
        String.IndexOf()
        可以很好地解决这个问题

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

      • 如果您只有需要替换的索引,一个常见的例子是Twitter API返回的URL实体(因为Twitter会告诉您链接的位置以及需要替换的位置),那么您可以通过拆分字符串来实现这一点。基本上,如果您有替换范围
        [10,19]
        [31,35]
        ,那么您可以将字符串分成三部分:
        [0,9]