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最後のコンマなしです。私は通常、最後のコンマを分割しますが、これは見苦しく太りすぎのようです。これを行う軽量な方法はありますか?

この質問への追加:結果が次のようなものであるというコンスタレーションに「and」を追加する簡単な解決策はありますか:a, b, c, d and eユーザー出力用?

ps: この例で replace-method を使用できることはわかっていますが、ほとんどの場合 (SQL 文字列を作成する場合など) 使用できないため、これは私が探しているものではありません。

4

7 に答える 7

11

私は使用しますstring.Join

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

または、ループの本体の先頭にセパレーターを追加できますが、最初のラウンドでは追加できません。

StringBuilderただし、これを手動で行いたい場合は、使用することをお勧めします。実際、 aStringBuilderを使用すると、無条件にセパレーターを追加し、最後の長さを減らしてその端をトリミングすることができます。

あなたも書いた:

たとえば、SQL文字列を作成するとき

このような SQL 文字列を作成することが良い考えになることはめったにありません。特に、ここではユーザー入力の文字列を絶対に使用しないでください。代わりにパラメーター化された SQL を使用してください。SQL の構築は、通常、ORM コードのドメインです...その場合、通常、独自の ORM を作成するよりも、既存の ORM を使用する方が適切です:)

于 2013-02-14T14:01:25.090 に答える
4

最後を除くすべての文字列の後にコンマを追加することで問題を特徴付けています。最初の文字列を除くすべての文字列の前にコンマを付けることを検討してください。それはもっと簡単な問題です。

あなたのより難しいバージョンに関しては、私のブログとこの質問に数十の解決策があります。

エリック・リッパートの挑戦「コンマを震わせる」、ベストアンサー?

于 2013-02-14T15:12:13.183 に答える
2

string.Joinあなたの友達かもしれません:

String str='a b c d e';
var newStr = string.Join(",", str.Split(' '));
于 2013-02-14T14:01:57.673 に答える
2

最後の値の前に「and」がある場所でそれを行う方法は次のとおりです。

var vals = str.Split(' ');
var ans = vals.Length == 1 ?
          str :
          string.Join(", ", vals.Take(vals.Length - 1))) + ", and " + vals.Last();
于 2013-02-14T14:05:41.380 に答える
1
newStr = String.Join(",", str.split(' '));
于 2013-02-14T14:02:19.827 に答える
1

Regex空白を使用してカンマに置き換えることができます

string newst = Regex.Replace(input, " ", ",");
于 2013-02-14T14:04:38.177 に答える
0

まず、この種の文字列操作には StringBuilder を使用する必要があります。2 つ目は、挿入の if 条件です。

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);
}
于 2013-02-14T14:02:51.787 に答える