我有一個字符串像AX_1234X_12345_X_CXY
,我想從第一個下劃線_
即從1234X
到1234
後刪除X
。所以最終的輸出將會像AX_1234_12345_X_CXY
。怎麼做??如果我使用.Replace("X", "")
它將替換所有X
我不想如何從c#中的字符串替換特定的字符?
回答
可以遍歷槽從'_'
中第一次出現的字符串。
您可以使用IndexOf()找到'_'
的第一個匹配項。
當循環變爲'X'時,它不會將其追加到「固定字符串」。
private static void Func()
{
string Original = "AX_1234X_12345_X_CXY";
string Fixed = Original.Substring(0, Original.IndexOf("_", 0));
// in case you want to remove all 'X`s' after first occurrence of `'_'`
// just dont use that variable
bool found = false;
for (int i = Original.IndexOf("_", 0); i < Original.Length; i++)
{
if (Original[i].ToString()=="X" && found == false)
{
found = true;
}
else
{
Fixed += Original[i];
}
}
Console.WriteLine(Fixed);
Console.ReadLine();
}
一種方法是String.Remove,因爲你可以告訴正是從刪除。如果有問題的「X」總是在同一個地方,你可以使用:
string newString = old.Remove(7,1);
這將刪除1個字符起7位(從零作爲字符串的開頭算起)。
如果不是總是在相同的字符位置,你可以嘗試:
int xPos = old.IndexOf("X");
string newString = old.Remove(xPos,1);
編輯:
基於OP的評論中,「X」我們針對剛剛發生後的第一強調個性,讓我們離指數第一個下劃線的:
int iPosUnderscore = old.IndexOf("_");
string newString = old.Remove(iPosUnderscore + 1 ,1); // start after the underscore
如果字符串中想要的之前有'x',則第二個建議將不起作用。 –
同意。我根據他的確切問題回答了我的答案,這個答案保留了後面輸入的X個字符。 – TomServo
我只是想得到nitpicky一秒,並提到你的第二塊代碼中的變量名是無效的。 –
string original = @"AX_1234X_12345_X_CXY";
original = @"AX_1234_12345_X_CXY";
那麼,它的工作原理... – Adrian
試着看一下string.IndexOf
或string.IndexOfAny
string s = "AX_1234X_12345_X_CXY";
string ns = HappyChap(s);
public string HappyChap(string value)
{
int start = value.IndexOf("X_");
int next = start;
next = value.IndexOf("X_", start + 1);
if (next > 0)
{
value = value.Remove(next, 1);
}
return value;
}
循環不需要,如果只有第二次發生 – eschneider
我們並不真正知道這裏的模式。那麼如果我們有「AX_1234C_12345_X_CXY」,它會給你一個「AX_1234C_12345__CXY」的結果 –
我們不是這個問題缺乏細節。但我認爲使用的主要概念是IndexOf – eschneider
爲什麼不好老IndexOf
和Substring
?
string s = "AX_1234X_12345_X_CXY";
int pUnder = s.IndexOf('_');
if (pUnder >= 0) { // we have underscope...
int pX = s.IndexOf('X', pUnder + 1); // we should search for X after the underscope
if (pX >= 0) // ...as well as X after the underscope
s = s.Substring(0, pX) + s.Substring(pX + 1);
}
Console.Write(s);
結果:
AX_1234_12345_X_CXY
這比我的正則表達式解決方案更快。但是,如果你想讓你的解決方案快兩倍,那就改爲:s = s.Remove(pX,1);而不是你的子串。 –
當且僅當這始終是格式,那麼它應該是不包括在該位的X結合原文子的一個簡單的事情。但是運營商並沒有說明情況總是如此。因此,如果這是永遠的格式和相同的字符位置始終刪除,那麼你可以簡單地只是
string s = "AX_1234X_12345_X_CXY";
string newstring = s.Substring(0, 7) + s.Substring(8);
確定的基礎上,只有第二組數字是長度可變的,然後你可以這樣做:
int startpos = s.IndexOf('_', 4);
string newstring = s.Substring(0, startpos - 1) + s.Substring(startpos);
與此代碼,下面的測試結果中:
"AX_1234X_12345_X_CXY" became "AX_1234_12345_X_CXY"
"AX_123X_12345_X_CXY" became "AX_123_12345_X_CXY"
"AX_234X_12345_X_CXY" became "AX_234_12345_X_CXY"
"AX_1X_12345_X_CXY" became "AX_1_12345_X_CXY"
它可以varry,只有條件是在第一個下劃線之後,所以它可以是AX_1234X_12345_X_CXY或AX_234X_12345_X_CXY – peter
像這樣的東西可以工作。我確定有一個更優雅的解決方案。
string input1 = "AX_1234X_12345_X_CXY";
string pattern1 = "^[A-Z]{1,2}_[0-9]{1,4}(X)";
string newInput = string.Empty;
Match match = Regex.Match(input1, pattern1);
if(match.Success){
newInput = input1.Remove(match.Groups[1].Index, 1);
}
Console.WriteLine(newInput);
- 1. 替換特定的字符串C#?
- 2. PHP:將字符串從特定字符串替換爲特定字符串
- 3. 用字符串c中的unicode字符替換特殊字符#
- 4. 如何替換包含python中特定字符的字符串?
- 5. 如何從字符串中的asp.net替換特殊字符
- 6. c中的字符串替換字符#
- 7. 替換字符串中的字符C
- 8. C++用帶特定索引的字符替換字符串?
- 9. Visual c#從字符串中替換特殊字符和空格
- 10. 如何在特定字符前替換字符串的子字符串?
- 11. 如何在c#中的特定位置替換字符串?
- 12. 替換大字符串中的特定字符串
- 13. 在字符串中的特定索引處替換字符串?
- 14. 用特殊字符替換字符串中的字符串
- 15. 替換字符串中特定字符之間的特定字符
- 16. 如何用其他字符替換字符串中的特定字符
- 17. 替換行中的特定字符,C++
- 18. 替換python中的字符串中的特定字符
- 19. 從特定字符替換字符串的一部分
- 20. 如何在java中替換字符串中的特定字母?
- 21. MySQL的 - 替換列字符串中的特定字符
- 22. C#替換字符串中的特殊字符
- 23. 如何用PHP替換字符串中的特殊字符?
- 24. 如何替換字符串中的多個特殊字符
- 25. 如何替換arrayadapter字符串中的特殊字符?
- 26. Java如何將字符串的最後字符替換爲特定字符
- 27. 替換字符串中的特殊字符(如「中的R
- 28. 替換字符串的特定部分
- 29. 特定的字符串替換
- 30. 標籤特定的字符串替換
可能的重複[替換第二次出現?與&(https://stackoverflow.com/questions/23547100/replace-second-occurence-of-with-an) – Software2
我認爲正則表達式將是你的答案。 – Ahmar
'1234'的語義是什麼?你想要完成什麼,更普遍?它會始終是四位數字後跟一個'X'?提取一般模式,然後使用正則表達式進行搜索和替換。 –