簡體   English   中英

替換字符串字符

[英]Replace String characters

我有一個弦

"#1#+#2#+#3#*1.23+#4#/2+#5#"

我有一個對象列表

  • 1,“ ABC”
  • 2,“ DEF”
  • 3,“ GHI”
  • 4,“ JKL”
  • 5,“ MNO”

我需要一個新字符串,其中#1#替換為“ ABC”,#2#替換為DEF等。

所需的字符串:

"ABC+DEF+GHI*1.23+JKL/2+MNO"

如何使替換有效執行?

編輯:當前,我正在循環為列表中的每個,並為字符串使用替換,但我認為它不是非常節省內存。 一定會有更好的辦法。

如果性能不是一個大問題,則可能要使用正則表達式:

string input = "#1#+#2#+#3#*1.23+#4#/2+#5#";
var replaces = new List<string> { "ABC", "DEF", "GHI", "JKL", "MNO" };

string result = Regex.Replace(input, "#[0-9]+#", match => 
{
    string number = match.Value.Substring(1, match.Value.Length - 2);
    int index = int.Parse(number) - 1;
    return replaces[index];
});

即使“#”之間的數字也有效:

  • 不正常
  • 發生多次
  • 多於一位

“#”之間的數字N必須與replaces列表中的第(N-1)個索引相對應。 您可能要添加一些錯誤處理。

從數據庫中讀取此行。 閱讀它並更改{或}的#號。 如果是第一個#,則{,如果它是第二個},依此類推。 然后結果將類似於下面的文本變量;)

string text = "{0}+{1}+{2}*1.23+{3}/2+{4}";

你有一個數組:

string[] replaces = {"ABC",
"DEF",
"GHI",
"JKL",
"MNO"};

你可以做這樣的事情:

string result = string.Format(text, replaces);

兩個答案:

  1. 簡單的一個。 對列表中的每個對象使用string.Replace(...)方法。 但是在長字符串替換很多的情況下,它會很慢。
  2. 創建StringBuilder。 遍歷字符串,將char復制到stringbuilder,直到遇到替換子字符串。 在StringBuilder中插入替換對象,然后繼續迭代您的輸入字符串。 返回StringBuilder.ToString()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM