"How do I do this? "
この文字列があるとしましょう。末尾のスペースを 1 つだけ削除するにはどうすればよいですか? 以下に示すコードでは、カウントが範囲外であるというエラーが表示されます。
string s = "How do I do this? ";
s = s.Remove(s.Length, 1);
"How do I do this? "
この文字列があるとしましょう。末尾のスペースを 1 つだけ削除するにはどうすればよいですか? 以下に示すコードでは、カウントが範囲外であるというエラーが表示されます。
string s = "How do I do this? ";
s = s.Remove(s.Length, 1);
代わりにこれを使用するだけです:
string s = "How do I do this? ";
s = s.Remove(s.Length-1, 1);
ここで述べたように:
Remove(Int32) 指定された位置から最後の位置まで、現在のインスタンス内のすべての文字が削除された新しい文字列を返します。
配列では、位置の範囲は 0 から長さ 1 までであるため、コンパイラ エラーが発生します。
最初の文字から部分文字列を実行するだけで(文字は文字列で0ベースです)、文字列の長さを1だけ引いた文字数を取得します
s = s.Substring(0, s.Length - 1);
次の行に何かを書く必要があります
string s = "How do I do this?
s = s.Remove(s.Length-1, 1);
その理由は、配列内のインデックスを参照する場合、C# では最初の要素が常に位置 0 であり、長さ - 1 で終わるからです。長さは通常、文字列の長さを示しますが、実際の配列インデックスにはマップされません。
それを行う別の方法は次のとおりです。
string s = "How do I do this? ";
s=s.SubString(0,s.Length-1);
追加 :
最後の文字がスペースか何かであることをさらに確認したい場合は、この方法で行うことができます。
string s = "How do I do this? a";//Just for example,i've added a 'a' at the end.
int index = s.Length - 1;//Get last Char index.
if (index > 0)//If index exists.
{
if (s[index] == ' ')//If the character at 'index' is a space.
{
MessageBox.Show("Its a space.");
}
else if (char.IsLetter(s[index]))//If the character at 'index' is a letter.
{
MessageBox.Show("Its a letter.");
}
else if(char.IsDigit(s[index]))//If the character at 'index' is a digit.
{
MessageBox.Show("Its a digit.");
}
}
これにより、「Its a letter」というメッセージが表示された MessageBox が表示されます。
等しい番号の文字列を作成したい場合、もう1つ役立つことがあります。各単語間のスペースの場合、これを試すことができます。
string s = "How do I do this? ";
string[] words = s.Split(new char[] {' '},StringSplitOptions.RemoveEmptyEntries);//Break the string into individual words.
StringBuilder sb = new StringBuilder();
foreach (string word in words)//Iterate through each word.
{
sb.Append(word);//Append the word.
sb.Append(" ");//Append a single space.
}
MessageBox.Show(sb.ToString());//Resultant string 'sb.ToString()'.
これにより、"How do I do this?" (単語間の等間隔) が表示されます。