我是 C# 的初學者,我被這個問題困住了。
string original = "foo bar foo $ bar $ foo bar $ ";
string desired_output = "foo bar foo $ bar foo bar";
我找到了一個粗略的代碼,但結果并不好。
你能幫我解決問題嗎?
這是我的代碼:
string s = "foo bar foo $ bar $ foo bar $ ";
char ch = '$';
for (int i = 0; i < s.Length; i )
{
if (s[i] == ch)
{
s = s.Substring(0, i)
s.Substring(i 1);
break;
}
}
for (int i = s.Length - 1; i > -1; i--)
{
if (s[i] == ch)
{
s = s.Substring(0, i)
s.Substring(i 1);
break;
}
}
Console.WriteLine(s);
我收到的輸出是foo bar foo bar $ foo bar.
uj5u.com熱心網友回復:
string original = "foo bar foo $ bar $ foo bar $ ";
string desired_output = "foo bar foo $ bar foo bar";
string result = original;
int index = original.IndexOf("$") 1;
if (index > 0)
{
result = (original.Substring(0, index) original.Substring(index).Replace("$", "")).Replace(" ", " ").Trim();
}
Console.WriteLine(desired_output == result);
在這里看到它:
https://dotnetfiddle.net/I3lVua
或者:
string original = "foo bar foo $ bar $ foo bar $ ";
string desired_output = "foo bar foo $ bar foo bar";
var buffer = original.ToCharArray();
bool found = false;
int dest = 0;
for(int i = 0; i < buffer.Length; i )
{
if (buffer[i] != '$' || !found)
{
buffer[dest] = buffer[i];
dest ;
}
if (buffer[i] == '$') found = true;
}
var result = new string(buffer, 0, dest).Replace(" ", " ").Trim();
Console.WriteLine(desired_output == result);
https://dotnetfiddle.net/iVtw8E
請注意,對于這兩種解決方案,額外的間距都存在問題,因此額外的Replace()和Trim()呼叫。
uj5u.com熱心網友回復:
如果您只想保留第一個 $,那么您需要做的第一件事是使用第一個 for 回圈來查找第一個 $ 并將后一個子字串創建到主字串的末尾。完成后,使用Replace函式替換該子字串中的所有其他 $。然后只需將子字串的第一部分和清理后的第二部分結合起來,您將獲得所需的輸出
uj5u.com熱心網友回復:
您不需要 2 個 for 回圈。一個就夠了。只需將所有字符復制到 aStringBuilder中,除非該 char 是所需的字符 ( $) 并且之前已經復制過一次。一個布爾標志就足以實作這一點。
using System;
using System.Text;
namespace cs
{
class Program
{
static string RemoveAllButFirst(char c, string s) {
var first = true;
var sb = new StringBuilder();
foreach (char x in s) {
if (c == x) {
if (first) {
sb.Append(x);
first = false;
}
} else {
sb.Append(x);
}
}
return sb.ToString();
}
static void Main(string[] args)
{
string original = "foo bar foo $ bar $ foo bar $ ";
System.Console.WriteLine(original);
System.Console.WriteLine(RemoveAllButFirst( '$', original));
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/497325.html
標籤:C#
