diff --git a/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAString/RemoveLastCharOfAString.csproj b/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAString/RemoveLastCharOfAString.csproj
index 848f901f4f..c96a8eb1e7 100644
--- a/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAString/RemoveLastCharOfAString.csproj
+++ b/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAString/RemoveLastCharOfAString.csproj
@@ -2,13 +2,13 @@
Exe
- net8.0
+ net10.0
enable
enable
-
+
diff --git a/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAString/TechniquesToRemoveLastChar.cs b/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAString/TechniquesToRemoveLastChar.cs
index dc81c934a6..af33222156 100644
--- a/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAString/TechniquesToRemoveLastChar.cs
+++ b/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAString/TechniquesToRemoveLastChar.cs
@@ -2,6 +2,7 @@
using BenchmarkDotNet.Columns;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Order;
+using System.Globalization;
using System.Text;
namespace RemoveLastCharOfAString;
@@ -29,6 +30,13 @@ public string RemoveLastCharUsingSubstring(string inputString)
return inputString.Substring(0, inputString.Length - 1);
}
+ [Benchmark]
+ [Arguments(TestString)]
+ public string RemoveLastCharUsingRange(string inputString)
+ {
+ return inputString[..^1];
+ }
+
[Benchmark]
[Arguments(TestString)]
public string RemoveLastCharUsingLinq(string inputString)
@@ -55,7 +63,7 @@ public ReadOnlySpan RemoveLastCharAsSpan(string inputString)
[Benchmark]
[Arguments(TestString)]
- public string RemoveLastCharUsingStringBuilder(string inputString)
+ public string RemoveLastCharUsingStringBuilderLength(string inputString)
{
var stringBuilder = new StringBuilder(inputString);
--stringBuilder.Length;
@@ -63,4 +71,28 @@ public string RemoveLastCharUsingStringBuilder(string inputString)
return stringBuilder.ToString();
}
+ [Benchmark]
+ [Arguments(TestString)]
+ public string RemoveLastCharUsingStringBuilderRemove(string inputString)
+ {
+ var stringBuilder = new StringBuilder(inputString);
+ stringBuilder.Remove(stringBuilder.Length - 1, 1);
+
+ return stringBuilder.ToString();
+ }
+
+ public static string RemoveLastTextElement(string input)
+ {
+ if (input.Length == 0)
+ return input;
+
+ var enumerator = StringInfo.GetTextElementEnumerator(input);
+ var lastStart = 0;
+
+ while (enumerator.MoveNext())
+ lastStart = enumerator.ElementIndex;
+
+ return input[..lastStart];
+ }
+
}
\ No newline at end of file
diff --git a/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAStringTests/RemoveLastCharOfAStringTests.csproj b/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAStringTests/RemoveLastCharOfAStringTests.csproj
index 951d3f0041..b38312359f 100644
--- a/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAStringTests/RemoveLastCharOfAStringTests.csproj
+++ b/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAStringTests/RemoveLastCharOfAStringTests.csproj
@@ -1,7 +1,7 @@
- net8.0
+ net10.0
enable
enable
@@ -10,10 +10,10 @@
-
-
-
-
+
+
+
+
diff --git a/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAStringTests/RemoveLastCharOfAStringUnitTests.cs b/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAStringTests/RemoveLastCharOfAStringUnitTests.cs
index 0adffadfb0..8d3541a022 100644
--- a/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAStringTests/RemoveLastCharOfAStringUnitTests.cs
+++ b/strings-csharp/RemoveLastCharOfAString/RemoveLastCharOfAStringTests/RemoveLastCharOfAStringUnitTests.cs
@@ -42,9 +42,9 @@ public void GivenAString_WhenReadOnlySpanUsed_ThenVerifyLastCharRemoved()
}
[TestMethod]
- public void GivenAString_WhenStringBuilderUsed_ThenVerifyLastCharRemoved()
+ public void GivenAString_WhenStringBuilderLengthUsed_ThenVerifyLastCharRemoved()
{
- var actualString = _methodInstances.RemoveLastCharUsingStringBuilder(InputString);
+ var actualString = _methodInstances.RemoveLastCharUsingStringBuilderLength(InputString);
Assert.AreEqual(OutputString, actualString);
}
@@ -56,4 +56,29 @@ public void GivenAString_WhenReturnedAsSpanUsed_ThenVerifyLastCharRemoved()
Assert.AreEqual(OutputString, actualSpan.ToString());
}
-}
\ No newline at end of file
+
+ [TestMethod]
+ public void GivenAString_WhenRangeOperatorUsed_ThenVerifyLastCharRemoved()
+ {
+ var actualString = _methodInstances.RemoveLastCharUsingRange(InputString);
+
+ Assert.AreEqual(OutputString, actualString);
+ }
+
+ [TestMethod]
+ public void GivenAString_WhenStringBuilderRemoveUsed_ThenVerifyLastCharRemoved()
+ {
+ var actualString = _methodInstances.RemoveLastCharUsingStringBuilderRemove(InputString);
+
+ Assert.AreEqual(OutputString, actualString);
+ }
+
+ [TestMethod]
+ public void GivenAStringEndingInAnEmoji_WhenRemoveLastTextElementUsed_ThenVerifyWholeCharacterRemoved()
+ {
+ var actualString = TechniquesToRemoveLastChar.RemoveLastTextElement("Hi \U0001F44B");
+
+ Assert.AreEqual("Hi ", actualString);
+ Assert.AreEqual(3, actualString.Length);
+ }
+}