Skip to content

Commit

Permalink
Release 0.1.8
Browse files Browse the repository at this point in the history
  • Loading branch information
clarisma committed Aug 26, 2023
1 parent 9ada466 commit 6774401
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 2 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -28,7 +28,7 @@ Include this dependency in your project's `pom.xml`:
<dependency>
<groupId>com.geodesk</groupId>
<artifactId>geodesk</artifactId>
<version>0.1.8-SNAPSHOT</version>
<version>0.1.8</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -4,7 +4,7 @@

<groupId>com.geodesk</groupId>
<artifactId>geodesk</artifactId>
<version>0.1.8-SNAPSHOT</version>
<version>0.1.8</version>
<packaging>jar</packaging>

<name>GeoDesk</name>
Expand Down
98 changes: 98 additions & 0 deletions src/main/java/com/clarisma/common/text/Strings.java
Expand Up @@ -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;
}
}

0 comments on commit 6774401

Please sign in to comment.