前回、TrimStartのオーバーロードを書いたので、今回はTrimEndのオーバーロードを書きたいと思います。
StringExtensions.cs
using System; namespace Extensions { public static class StringExtensions { /// <summary> /// 文字列の末尾から、指定された文字列を削除します。 /// </summary> /// <param name="self"><see cref="System.String"/>のインスタンス。</param> /// <param name="trimString">削除する文字列。</param> /// <returns> /// 現在の文字列の末尾から、<paramref name="trimStrig"/>パラメーターの文字を削除した後に残った文字列。 /// <paramref name="trimStrig"/>がnullまたは空の場合は、代わりに空白文字が削除されます。 /// </returns> public static string TrimEnd(this string self, string trimString) { if (self == null) throw new NullReferenceException(string.Format("Null文字列に対して{0}を呼び出すことはできません。", nameof(TrimEnd))); if (string.IsNullOrEmpty(trimString)) return self.TrimEnd(' ').TrimEnd(' '); if (string.IsNullOrEmpty(self)) return self; if (self.EndsWith(trimString)) return self.Substring(0, self.Length - trimString.Length); return self; } } }
ユニットテスト
using Extensions; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; namespace ExtensionsTest { [TestClass] public class TrimEndTest { [TestMethod] public void 末尾の文字列が一致() { string source = "adede"; string trimString = "de"; string expected = "ade"; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 末尾の文字列が不一致() { string source = "adede"; string trimString = "ce"; string expected = "adede"; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } [TestMethod] [ExpectedException(typeof(NullReferenceException))] public void 文字列がnull() { string source = null; string trimString = "bc"; string actual = source.TrimEnd(trimString); } [TestMethod] public void 文字列が空() { string source = ""; string trimString = "bc"; string expected = ""; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 文字列が半角スペースで不一致() { string source = " "; string trimString = "bc"; string expected = " "; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 文字列が全角スペースで不一致() { string source = " "; string trimString = "bc"; string expected = " "; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 文字列が半角スペースで一致() { string source = "abcde "; string trimString = " "; string expected = "abcde"; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void 文字列が全角スペースで一致() { string source = "abcde "; string trimString = " "; string expected = "abcde"; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void trimStringがnullの場合は半角スペースが削除される() { string source = "abcde "; string trimString = null; string expected = "abcde"; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void trimStringが空の場合は半角スペースが削除される() { string source = "abcde "; string trimString = ""; string expected = "abcde"; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } [TestMethod] public void trimStringがnullの場合は全角スペースが削除される() { string source = "abcde "; string trimString = null; string expected = "abcde"; string actual = source.TrimEnd(trimString); Assert.AreEqual(expected, actual); } } }
テスト結果