diff --git a/README.md b/README.md index c7f9efb..4ad4c23 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Include this dependency in your project's `pom.xml`: com.geodesk geodesk - 0.1.8-SNAPSHOT + 0.1.8 ``` diff --git a/pom.xml b/pom.xml index 5037ef6..919712c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.geodesk geodesk - 0.1.8-SNAPSHOT + 0.1.8 jar GeoDesk diff --git a/src/main/java/com/clarisma/common/text/Strings.java b/src/main/java/com/clarisma/common/text/Strings.java index 685a60c..f3097f9 100644 --- a/src/main/java/com/clarisma/common/text/Strings.java +++ b/src/main/java/com/clarisma/common/text/Strings.java @@ -398,4 +398,102 @@ public static String uppercaseFirst(String s) if(s.isEmpty()) return s; return Character.toUpperCase(s.charAt(0)) + s.substring(1); } + + /** + * Escapes a string for JSON encoding. + * + * @param s The input string to be escaped. + * @return The escaped string. If no escaping was needed, + * returns the original string. + */ + public static String escapeForJson(String s) + { + // Check if any character needs escaping. + boolean needsEscaping = false; + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + if (c == '"' || c == '\\' || c < ' ') + { + needsEscaping = true; + break; + } + } + + // Return original string if no escaping needed + if (!needsEscaping) return s; + + // Escape necessary characters + StringBuilder escaped = new StringBuilder(); + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + switch (c) + { + case '"': + escaped.append("\\\""); + break; + case '\\': + escaped.append("\\\\"); + break; + case '/': + escaped.append("\\/"); + break; + case '\b': + escaped.append("\\b"); + break; + case '\f': + escaped.append("\\f"); + break; + case '\n': + escaped.append("\\n"); + break; + case '\r': + escaped.append("\\r"); + break; + case '\t': + escaped.append("\\t"); + break; + default: + if (c < ' ') // For other unprintable characters + { + escaped.append(String.format("\\u%04x", (int) c)); + } + else + { + escaped.append(c); + } + break; + } + } + + return escaped.toString(); + } + + /** + * Replaces unprintable/control characters (tab, line feed, etc.) + * in the input string with a space. + * + * @param s The input string to be processed. + * @return The processed string with unprintable characters replaced by spaces. + * If no unprintable characters were found, returns the original string. + */ + public static String cleanString(String s) + { + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + if (c < ' ') + { + StringBuilder processed = new StringBuilder(s.length()); + for (i = 0; i < s.length(); i++) + { + c = s.charAt(i); + processed.append(c < ' ' ? ' ' : c); + } + return processed.toString(); + } + } + return s; + } }