2013-02-14 69 views
2

比方說,我有一個foreach循環用繩子這樣的:什麼是合併字符串的最佳方式?

String newStr=''; 
String str='a b c d e'; 
foreach(String strChar in str.split(' ')) { 
    newStr+=strChar+','; 
} 

結果會是這樣的:a,b,c,d,e,但我想要的是a,b,c,d,e沒有最後一個逗號。我通常把最後一個逗號分開,但這看起來很醜並且超重。有沒有什麼輕量級的方法來做到這一點?

此附加問題:是否有任何簡單的解決方案,以添加一個「和」的星座,結果是這樣的:a, b, c, d and e用戶輸出?

p.s .:我知道我可以在示例中使用replace-method,但這不是我期待的,因爲在大多數情況下,您不能使用它(例如,當您構建sql字符串時)。

回答

11

我會用string.Join

string newStr = string.Join(",", str.Split(' ')); 

或者,您可以在第一次輪的循環體的開始添加分隔符,但

如果你想繼續這樣做,我會建議使用StringBuilder。實際上,對於StringBuilder,您可以無條件地追加分隔符,然後在最後減少長度以修剪該結尾。

您還寫道:

例如,當你建立一個SQL字符串

這是很少構建SQL字符串這樣一個好主意。尤其是,您應該絕對使用而不是使用來自用戶輸入的字符串 - 使用參數化的SQL。構建SQL是典型的ORM代碼域......在這種情況下,它通常是更好地使用現有的ORM,而不是推出自己的:)

+0

什麼是ORM?對象角色建模? – 2013-02-14 14:09:28

+0

@JanHommes http://en.wikipedia.org/wiki/Object-relational_mapping – asawyer 2013-02-14 14:14:16

+0

我使用LINQ。這是一個ORM嗎? – 2013-02-14 14:16:19

2

string.Join可能是您的朋友:

String str='a b c d e'; 
var newStr = string.Join(",", str.Split(' ')); 
1
newStr = String.Join(",", str.split(' ')); 
0

首先,你應該使用一個StringBuilder進行這種類型的字符串操作。其次,這只是插入條件。

System.Text.StringBuilder newStr = new System.Text.StringBuilder(""); 
string oldStr = "a b c d e"; 

foreach(string c in oldStr.Split(' ')) { 
    if (newStr.Length > 0) newStr.Append(","); 
    newStr.Append(c); 
} 
1

您可以使用Regex,並用逗號

string newst = Regex.Replace(input, " ", ","); 
+1

當string.Replace'和表達式很簡單時,爲什麼要用'Regex.Replace'來打擾? – juharr 2013-02-14 14:13:34

2

這裏是你怎麼做,你的最後一個值之前有「和」替換空格。

var vals = str.Split(' '); 
var ans = vals.Length == 1 ? 
      str : 
      string.Join(", ", vals.Take(vals.Length - 1))) + ", and " + vals.Last(); 
4

您正在將問題描述爲在除最後一個字符串之外的每個字符串後附加一個逗號。考慮將其表徵爲在每個字符串之前加上一個逗號,除了第一個字符串之前。這是一個更容易的問題。

至於你的更難的版本,我的博客和這個問題上有幾十個解決方案。

Eric Lippert's challenge "comma-quibbling", best answer?

相關問題