optimize string splits
This commit is contained in:
parent
3d10d08a1a
commit
8dc12fd01c
|
@ -11,6 +11,7 @@
|
|||
* For players:
|
||||
* The SMAPI installer now also detects game folders listed in Steam's `.vdf` library data on Windows (thanks to pizzaoverhead!).
|
||||
* Optimized performance and memory usage (thanks to atravita!).
|
||||
* Other internal optimizations.
|
||||
* Added more file extensions to ignore when searching for mod folders: `.7z`, `.tar`, `.tar.gz`, and `.xcf` (thanks to atravita!).
|
||||
* Fixed update alerts incorrectly shown for prerelease versions on GitHub that aren't marked as prerelease.
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ namespace StardewModdingAPI.Mods.ConsoleCommands.Framework.Commands.Player
|
|||
/// <param name="color">The color to set.</param>
|
||||
private bool TryParseColor(string input, out Color color)
|
||||
{
|
||||
string[] colorHexes = input.Split(new[] { ',' }, 3);
|
||||
string[] colorHexes = input.Split(',', 3);
|
||||
if (int.TryParse(colorHexes[0], out int r) && int.TryParse(colorHexes[1], out int g) && int.TryParse(colorHexes[2], out int b))
|
||||
{
|
||||
color = new Color(r, g, b);
|
||||
|
|
|
@ -136,11 +136,11 @@ namespace SMAPI.Tests.Utilities
|
|||
foreach (string rawPair in stateMap.Split(','))
|
||||
{
|
||||
// parse values
|
||||
string[] parts = rawPair.Split(new[] { ':' }, 2);
|
||||
string[] parts = rawPair.Split(':', 2, StringSplitOptions.TrimEntries);
|
||||
if (!Enum.TryParse(parts[0], ignoreCase: true, out SButton curButton))
|
||||
Assert.Fail($"The state map is invalid: unknown button value '{parts[0].Trim()}'");
|
||||
Assert.Fail($"The state map is invalid: unknown button value '{parts[0]}'");
|
||||
if (!Enum.TryParse(parts[1], ignoreCase: true, out SButtonState state))
|
||||
Assert.Fail($"The state map is invalid: unknown state value '{parts[1].Trim()}'");
|
||||
Assert.Fail($"The state map is invalid: unknown state value '{parts[1]}'");
|
||||
|
||||
// get state
|
||||
if (curButton == button)
|
||||
|
|
|
@ -121,10 +121,10 @@ namespace StardewModdingAPI.Web.Framework.Clients.Nexus
|
|||
HtmlNode? node = doc.DocumentNode.SelectSingleNode("//div[contains(@class, 'site-notice')][contains(@class, 'warning')]");
|
||||
if (node != null)
|
||||
{
|
||||
string[] errorParts = node.InnerText.Trim().Split(new[] { '\n' }, 2, System.StringSplitOptions.RemoveEmptyEntries);
|
||||
string[] errorParts = node.InnerText.Trim().Split('\n', 2, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
||||
string errorCode = errorParts[0];
|
||||
string? errorText = errorParts.Length > 1 ? errorParts[1] : null;
|
||||
switch (errorCode.Trim().ToLower())
|
||||
switch (errorCode.ToLower())
|
||||
{
|
||||
case "not found":
|
||||
return null;
|
||||
|
|
|
@ -223,7 +223,7 @@ namespace StardewModdingAPI.Framework.Logging
|
|||
// show update alert
|
||||
if (File.Exists(Constants.UpdateMarker))
|
||||
{
|
||||
string[] rawUpdateFound = File.ReadAllText(Constants.UpdateMarker).Split(new[] { '|' }, 2);
|
||||
string[] rawUpdateFound = File.ReadAllText(Constants.UpdateMarker).Split('|', 2);
|
||||
if (SemanticVersion.TryParse(rawUpdateFound[0], out ISemanticVersion? updateFound))
|
||||
{
|
||||
if (Constants.ApiVersion.IsPrerelease() && updateFound.IsNewerThan(Constants.ApiVersion))
|
||||
|
|
|
@ -58,7 +58,7 @@ namespace StardewModdingAPI.Framework.ModLoading.Finders
|
|||
MethodReference? methodRef = RewriteHelper.AsMethodReference(instruction);
|
||||
if (methodRef != null && methodRef.DeclaringType.FullName == this.FullTypeName && this.MethodNames.Contains(methodRef.Name))
|
||||
{
|
||||
string eventName = methodRef.Name.Split(new[] { '_' }, 2)[1];
|
||||
string eventName = methodRef.Name.Split('_', 2)[1];
|
||||
this.MethodNames.Remove($"add_{eventName}");
|
||||
this.MethodNames.Remove($"remove_{eventName}");
|
||||
|
||||
|
|
|
@ -1384,7 +1384,7 @@ namespace StardewModdingAPI.Framework
|
|||
}
|
||||
|
||||
// check min length for specific types
|
||||
switch (fields[SObject.objectInfoTypeIndex].Split(new[] { ' ' }, 2)[0])
|
||||
switch (fields[SObject.objectInfoTypeIndex].Split(' ', 2)[0])
|
||||
{
|
||||
case "Cooking":
|
||||
if (fields.Length < SObject.objectInfoBuffDurationIndex + 1)
|
||||
|
|
|
@ -54,12 +54,12 @@ namespace StardewModdingAPI.Utilities
|
|||
}
|
||||
|
||||
// parse buttons
|
||||
string[] rawButtons = input.Split('+');
|
||||
string[] rawButtons = input.Split('+', StringSplitOptions.TrimEntries);
|
||||
SButton[] buttons = new SButton[rawButtons.Length];
|
||||
List<string> rawErrors = new List<string>();
|
||||
for (int i = 0; i < buttons.Length; i++)
|
||||
{
|
||||
string rawButton = rawButtons[i].Trim();
|
||||
string rawButton = rawButtons[i];
|
||||
if (string.IsNullOrWhiteSpace(rawButton))
|
||||
rawErrors.Add("Invalid empty button value");
|
||||
else if (!Enum.TryParse(rawButton, ignoreCase: true, out SButton button))
|
||||
|
|
Loading…
Reference in New Issue