diff --git a/PKHeX.Core/MysteryGifts/PGF.cs b/PKHeX.Core/MysteryGifts/PGF.cs
index 18fbf170a..77b171bba 100644
--- a/PKHeX.Core/MysteryGifts/PGF.cs
+++ b/PKHeX.Core/MysteryGifts/PGF.cs
@@ -53,7 +53,7 @@ public sealed class PGF : MysteryGift, IRibbonSetEvent3, IRibbonSetEvent4, ILang
public string Nickname
{
- get => StringConverter.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x1E, 0x16));
+ get => Util.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x1E, 0x16));
set => Encoding.Unicode.GetBytes(value.PadRight(0xB, (char)0xFFFF)).CopyTo(Data, 0x1E);
}
@@ -78,7 +78,7 @@ public string Nickname
public int IV_SPD { get => Data[0x48]; set => Data[0x48] = (byte)value; }
// Unused 0x49
public override string OT_Name {
- get => StringConverter.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x4A, 0x10));
+ get => Util.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x4A, 0x10));
set => Encoding.Unicode.GetBytes(value.PadRight(0x08, (char)0xFFFF)).CopyTo(Data, 0x4A); }
public int OTGender { get => Data[0x5A]; set => Data[0x5A] = (byte)value; }
@@ -87,7 +87,7 @@ public string Nickname
// Unused 0x5D 0x5E 0x5F
public override string CardTitle
{
- get => StringConverter.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x60, 0x4A));
+ get => Util.TrimFromFFFF(Encoding.Unicode.GetString(Data, 0x60, 0x4A));
set => Encoding.Unicode.GetBytes((value + '\uFFFF').PadRight(0x4A / 2, '\0')).CopyTo(Data, 0x60);
}
diff --git a/PKHeX.Core/PKM/Strings/StringConverter.cs b/PKHeX.Core/PKM/Strings/StringConverter.cs
index 0fd50ef78..7f8d10d1e 100644
--- a/PKHeX.Core/PKM/Strings/StringConverter.cs
+++ b/PKHeX.Core/PKM/Strings/StringConverter.cs
@@ -72,7 +72,7 @@ public static byte[] SetString(string value, int generation, bool jp, bool bigen
/// Decoded string.
public static string GetString5(byte[] data, int offset, int count)
{
- return SanitizeString(TrimFromFFFF(Encoding.Unicode.GetString(data, offset, count)));
+ return SanitizeString(Util.TrimFromFFFF(Encoding.Unicode.GetString(data, offset, count)));
}
/// Gets the bytes for a Generation 5 string.
@@ -292,17 +292,6 @@ internal static string UnSanitizeString(string str, int generation)
private static readonly char[] FullToHalf = {'\u2640', '\u2642'}; // ♀♂
- ///
- /// Trims a string at the first instance of a 0xFFFF terminator.
- ///
- /// String to trim.
- /// Trimmed string.
- public static string TrimFromFFFF(string input)
- {
- int index = input.IndexOf((char)0xFFFF);
- return index < 0 ? input : input.Substring(0, index);
- }
-
public static bool HasEastAsianScriptCharacters(IEnumerable str) => str.Any(c => 0x4E00 <= c && c <= 0x9FFF);
}
}
diff --git a/PKHeX.Core/Saves/SAV5.cs b/PKHeX.Core/Saves/SAV5.cs
index ce6c73e09..91e960e5c 100644
--- a/PKHeX.Core/Saves/SAV5.cs
+++ b/PKHeX.Core/Saves/SAV5.cs
@@ -233,7 +233,7 @@ public override string GetBoxName(int box)
{
if (box >= BoxCount)
return string.Empty;
- return StringConverter.TrimFromFFFF(Encoding.Unicode.GetString(Data, PCLayout + (0x28 * box) + 4, 0x28));
+ return Util.TrimFromFFFF(Encoding.Unicode.GetString(Data, PCLayout + (0x28 * box) + 4, 0x28));
}
public override void SetBoxName(int box, string value)
diff --git a/PKHeX.Core/Util/PathUtil.cs b/PKHeX.Core/Util/PathUtil.cs
index 7338183cf..fb7d3453d 100644
--- a/PKHeX.Core/Util/PathUtil.cs
+++ b/PKHeX.Core/Util/PathUtil.cs
@@ -8,11 +8,5 @@ public static string CleanFileName(string fileName)
{
return string.Concat(fileName.Split(Path.GetInvalidFileNameChars()));
}
-
- public static string TrimFromZero(string input)
- {
- int index = input.IndexOf('\0');
- return index < 0 ? input : input.Substring(0, index);
- }
}
}
diff --git a/PKHeX.Core/Util/Util.cs b/PKHeX.Core/Util/Util.cs
index f1615360d..40caf3013 100644
--- a/PKHeX.Core/Util/Util.cs
+++ b/PKHeX.Core/Util/Util.cs
@@ -1,4 +1,5 @@
using System.Linq;
+using System.Runtime.CompilerServices;
namespace PKHeX.Core
{
@@ -106,5 +107,26 @@ public static uint GetHexValue(string value)
///
/// Input string to modify
public static string ToTitleCase(string str) => string.IsNullOrWhiteSpace(str) ? string.Empty : string.Join(" ", str.Split(' ').Select(TitleCase));
+
+ ///
+ /// Trims a string at the first instance of a 0xFFFF terminator.
+ ///
+ /// String to trim.
+ /// Trimmed string.
+ public static string TrimFromFFFF(string input) => TrimFromFirst(input, (char)0xFFFF);
+
+ ///
+ /// Trims a string at the first instance of a 0x0000 terminator.
+ ///
+ /// String to trim.
+ /// Trimmed string.
+ public static string TrimFromZero(string input) => TrimFromFirst(input, '\0');
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static string TrimFromFirst(string input, char c)
+ {
+ int index = input.IndexOf(c);
+ return index < 0 ? input : input.Substring(0, index);
+ }
}
}