From 9696cf26a8f57d4c8a7964ce3a4bcab8e6f54116 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Wed, 16 Nov 2022 16:31:07 +0100 Subject: [PATCH] Adds a stateful StringReplacer for complex tasks --- .../knarlib/formatting/StringReplacer.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/main/java/net/knarcraft/knarlib/formatting/StringReplacer.java diff --git a/src/main/java/net/knarcraft/knarlib/formatting/StringReplacer.java b/src/main/java/net/knarcraft/knarlib/formatting/StringReplacer.java new file mode 100644 index 0000000..2869d74 --- /dev/null +++ b/src/main/java/net/knarcraft/knarlib/formatting/StringReplacer.java @@ -0,0 +1,76 @@ +package net.knarcraft.knarlib.formatting; + +import java.util.HashMap; +import java.util.Map; + +/** + * A stateful string replacer + * + *

Add placeholder -> value pairs before running replace on the wanted string

+ */ +@SuppressWarnings("unused") +public class StringReplacer { + + private final Map replacements = new HashMap<>(); + private String replacementInput; + + /** + * Instantiates a new string replacer + */ + public StringReplacer() { + } + + /** + * Instantiates a new string replacer + * + * @param replacementInput

The input string to replace placeholders for

+ */ + public StringReplacer(String replacementInput) { + this.replacementInput = replacementInput; + } + + /** + * Adds a new string replacement + * + * @param placeholder

The placeholder to replace

+ * @param value

The replacement value

+ */ + public void add(String placeholder, String value) { + this.replacements.put(placeholder, value); + } + + /** + * Removes a string replacement + * + * @param placeholder

The placeholder to remove

+ */ + public void remove(String placeholder) { + this.replacements.remove(placeholder); + } + + /** + * Replaces previously added placeholders in the string given in the constructor + * + *

You must use the constructor with a non-null string to use this method.

+ * + * @return

The string with placeholders replaced

+ */ + public String replace() { + if (replacementInput == null) { + throw new IllegalStateException("This method cannot be run without a defined string"); + } + return replace(replacementInput); + } + + /** + * Replaces previously added placeholders in the given string + * + * @param input

The string to replace placeholders in

+ * @return

The string with placeholders replaced

+ */ + public String replace(String input) { + return StringFormatter.replacePlaceholders(input, replacements.keySet().toArray(new String[0]), + replacements.values().toArray(new String[0])); + } + +}