我有全局聲明的字符串變量。我必須根據用戶輸入動態地將一個子字符串附加到這個字符串。爲此,我使用str = str + substring;字符串操作
在這種情況下,str中的字符串沒有意義的句子最後即,有之間沒有空格words.to讓它感覺到我用下面的語句代替,
海峽= STR +」「+子;或者str = str + substring +「」;
在這裏,每次我必須追加額外的空間到子串,然後再附加到主串,需要額外的字符串處理。
任何人都可以幫助我做到這一點嗎?
我有全局聲明的字符串變量。我必須根據用戶輸入動態地將一個子字符串附加到這個字符串。爲此,我使用str = str + substring;字符串操作
在這種情況下,str中的字符串沒有意義的句子最後即,有之間沒有空格words.to讓它感覺到我用下面的語句代替,
海峽= STR +」「+子;或者str = str + substring +「」;
在這裏,每次我必須追加額外的空間到子串,然後再附加到主串,需要額外的字符串處理。
任何人都可以幫助我做到這一點嗎?
這取決於你多久做一次。如果這是間歇性的(或者實際上非常多 - 除了緊密的循環之外的任何事情),那麼就忘記它;你有什麼是好的。 當然偶爾會產生一個額外的字符串(合併子字符串/空格),但它會在第0代收集;非常便宜。
如果你這樣做是積極(在一個循環等),然後用StringBuilder
代替:
// declaration
StringBuilder sb = new StringBuilder();
...
// composition
sb.Append(' ').Append(substring);
...
// obtaining the string
string s = sb.ToString();
最後一個(無關)點 - 再「全球」 - 如果你的意思是static
,你如果您有多個線程可能想要同步訪問。
你想要達到什麼目的?你可以存儲詞語列表
List<string> words = new List<string>();
...
words.Add(str);
然後延遲字符串操作,直到在最後(即添加單詞之間的空格)。這樣,您即將進行的操作只是添加到列表中,您可以在最後執行所有複雜的處理(無論它是什麼)。
(+1)。在這種情況下,我們可以使用類似'String str = words.Aggregate((X1,X2)=> X1 +「」+ X2)的聚集函數來構建最終的'string';' – 2010-10-19 05:38:02
@Pramodh:我想是這樣,但爲什麼我們想要? – 2010-10-19 05:59:34
@ Steven Sudit:'因爲這裏mrnye將字符串添加到列表中。所以這個列表將會包含'str','Substring1','substring2' ....但是Nanda需要一個單獨的字符串(據我所知) – 2010-10-19 06:03:17
@南達:在你的情況下,你應該使用字符串生成器。
StringBuilder data = new StringBuilder();
data.AppendFormat(" {0}", substring);
如果你關心性能,你應該避免這種情況。你的代碼必須在運行時解析格式字符串,這有成本。傑米和馬克的答案會比這更快。 – Stewart 2010-10-19 06:29:09
如果你是,你稍微靚起來的代碼做很少能這樣做:
str += " " + substring;
否則,我會與南大的解決方案去。
如果你只是偶爾連接幾個字符串,由於構建它的代價,StringBuilder可能會過度殺傷。過去習慣於使用字符串構建器來連接字符串,以避免由於必須完成的字符串複製而導致的最壞情況的二次複雜性,但是更新的C#編譯器顯然變得足夠聰明,可以將字符串連接鏈變成String.Concat調用使整個操作在線性時間內完成。 – Stewart 2010-10-19 06:32:45
@斯特沃特 - 長久以來一直如此,但只適用於單一的陳述;此外,我已經在這裏強調了兩種不同的場景(基於頻率) – 2010-10-19 06:43:45
哦,是的 - 我沒有正確閱讀第一句話。感謝您的確認。我認爲這是值得說明的。在很多地方,仍然認爲應該避免字符串連接,以至於在任何地方都可以使用StringBuilder,即使StringBuilder可能要貴得多。正如你所說,即使一段時間以來它一直沒有成立,但二次複雜性的原因總是被引用。 – Stewart 2010-10-19 07:43:57