2017-07-13 13 views
0

私は単語の間に複数のスペースを持つ文字列を持っています。これらのスペースを削除して戻したいのですが...問題はそれらを削除した後にスペースを戻すことでした。アイデアが、それは私はあなたが単一のもので複数のスペースを交換したいと思われる任意のヘルプ削除されたスペースを戻す方法

string pt = "My name is Code" 
int ptLenght = pt.Length; 
char[] buffer1 = pt.ToCharArray(); 
spaceHolder = new int[pt.Length]; 
for (int m = 0; m < pt.Length; m++) 
{ 
    if (buffer1[m] == ' ') 
    { 
     hold = m; 
     spaceHolder[m] = hold; 
    } 
} 
char[] buffer = pt.Replace(" ", string.Empty).ToCharArray(); 
int stringRemovedSpaces = pt.Length; 
char[] buffer = pt.ToCharArray(); // source 
char[] buffer2 = new char[ptLenght]; // destination 
for (int i = 0; i < pt.Length; i++) 
{ 
    buffer2[i] = buffer[i]; 
} 
for (int i = 0; i < buffer2.Length; i++) 
{ 
    if (i == spaceHolder[i]) 
    { 
     for (int m = stringRemovedSpaces; m <= i; m--) 
     { 
      buffer2[m-1] = buffer2[m]; 
     } 
     buffer2[i] = ' '; 
    } 
} 
return new string(buffer2); 
+5

私はあなたが正確にしたいものは不明です。スペースのない文字列を保持するために新しい変数を作成し、スペースを元に戻すときに元の変数を参照するのはなぜでしょうか? – maccettura

+0

あなたのコードはおそらくすべてのスペースを削除しましたか? 'Regex.Replace(" ABC "、@" \ s + "、" ")は' ABC'を返すでしょう –

+0

あなたはステップスルーしましたか?デバッガを使ったコード(実際に@maccetturaが言うことをすべきですが、やはりyrコードを診断できるはずです) – pm100

答えて

0

...それは私に「インデックスが配列の境界を越えのだった」の例外を与える任意の出力と、いくつかの時間なしで実行されます。これを行うための最も簡単な方法は、単一のスペースで複数の空白を置き換える単純な正規表現、例えばである:

var newString = Regex.Replace("A  B  C",@"\s+"," ") 

または

var newString = Regex.Replace("A  B  C",@"[ ]+"," ") 

繰り返しのように、これは他の方法よりも最速である理由文字列の置換は、正規表現がではなく、が一時的な文字列を生成するということです。国際的には、一致するアイテムのインデックスのリストを生成します。文字列は、コードが一致または置換などの文字列値を要求した場合にのみ生成されます。

正規表現オブジェクトもスレッドセーフです。あなたは、一度それを作成し、静的フィールドに格納し、それを再利用することができます

static Regex _spacer = new Regex(@"\s+"); 


public void MyMethod(string someInput) 
{ 
    ... 
    var newString=_spacer.Replace(someInput, " "); 
    ... 
} 
-1

私は@maccetturaのアドバイスに従って、私はこのようにそれをやったと私は:)

string orignalString = ""; 
orignalString = pt; 
char[] buffer = pt.ToCharArray(); 
orignalString = new string(buffer); 
return orignalString.Replace(" ", string.Empty); 
// Here I got the string without spaces , now I have the same string with and without spaces 
0
を望んだとして、それが働いていました

文字列内のすべてのスペースを削除することは、文字列のReplace関数を呼び出すことと同じくらい簡単です。文字列の置換を呼び出すと元の文字列は変更されず、新しい文字列が作成されて返されることに注意してください。 2つの異なる整数変数をpt.Lengthに設定し、実際にはptという文字列が決まっていないので、私はこれを持っています。また、ネストされたforループから "Index is array bounds"を取得していると思います。 mが永遠に減少するようにループが設定されています。ただし、mがゼロになると、いいえではないbuffer2から-1のインデックスにアクセスしようとしています。あなたは、文字列の元のコピーを保持しつつ、スペースを削除したい場合は、これにあなたのコードを簡素化できます。

string pt = "My name is Code"; 
string newpt = pt.Replace(" ", string.empty); 

ptがスペースを含む文字列である、newptスペースを削除した新しい文字列です。しかし、複数の連続するスペースを1つのスペースに置き換えたい場合は、Panagiotis Kanavos氏の答えに従うことをお勧めします。

関連する問題