簡體   English   中英

幫助字符串操作功能

[英]Help with string manipulation function

我有一組字符串,其中包含一個或多個由逗號分隔的問號,一個逗號加一個或多個空格,或者可能兩者都有。 所以這些字符串都是可能的:

BOB AND ?
BOB AND ?,?,?,?,?
BOB AND ?, ?, ? ,?
BOB AND ?,?  ,  ?,?
?,  ?               ,? AND BOB

我需要用@P#替換問號,以便上面的示例變為:

BOB AND @P1
BOB AND @P1,@P2,@P3,@P4,@P5
BOB AND @P1,@P2,@P3,@P4
BOB AND @P1,@P2,@P3,@P4
@P1,@P2,@P3 AND BOB

沒有正則表達式或Linq,最好的方法是什么?

如果您不想要正則表達式或LINQ,我只會編寫一個循環,並使用此問題中的“ReplaceFirst”方法循環遍歷字符串,替換每次出現的? 用適當的@P#。

如何在.NET中替換字符串的* first instance *?

也許是這樣的:

int i = 0;
while (myString.Contains("?"))
{
    myString = myString.ReplaceFirst("?", "@P" + i);
    i++;
}

請注意,“ReplaceFirst”不是字符串的標准方法 - 您必須實現它(例如,作為擴展方法,在此示例中)。

為什么不生成你的SQL,因為你在代碼中定義了適當的CASE參數,並在它准備就緒時最終執行它?

我忽略了輸出示例中的空格修剪,因為如果要在SQL語句中使用它,則空格是無關緊要的。 由於使用了StringBuilder而不是重復調用ReplaceSubstring或其他字符串方法,因此這應該可以很好地執行:

public static string GetParameterizedString(string s)
{
    var sb = new StringBuilder();
    var sArray = s.Split('?');
    for (var i = 0; i < sArray.Length - 1; i++)
    {
        sb.Append(sArray[i]);
        sb.Append("@P");
        sb.Append(i + 1);
    }
    sb.Append(sArray[sArray.Length - 1]);
    return sb.ToString();
} 

如果你想要開箱即用的東西:)

string toFormat = "?,  ?               ,? AND BOB";
while (toFormat.Contains("  "))
    toFormat = toFormat.Replace("  ", " ");
toFormat = toFormat.Replace("?", "{0}");
string formated = string.Format(toFormat, new PCounter());

PCounter就是這樣的

class PCounter{
    int i = 0;
    public override string ToString(){
        return "@P" + (++i);
    }
}

我覺得像下面這樣的東西應該這樣做。

string input = "BOB AND ?,?,?,?,?";
int number = 1;
int index = input.IndexOf("?");
while (index > -1)
{
    input = input.Substring(0, index).Trim() + " @P" + number++.ToString() + input.Substring(index + 1).Trim();
    index = input.IndexOf("?");
}

暫無
暫無

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

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