
org.leialearns.utilities.Display Maven / Gradle / Ivy
package org.leialearns.utilities;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Stack;
/**
* Provides functions to display objects in a human friendly form.
*/
public class Display {
private Display() {
throw new UnsupportedOperationException("This class must not be instantiated: " + getClass().getSimpleName());
}
/**
* Shows a string in such a way that it can be uniquely decoded, but with a minimum of syntactic sugar.
* @param s The string to show
* @return The representation of the given string
*/
public static String show(String s) {
StringBuilder builder = new StringBuilder();
if (s != null) {
for (char ch : s.toCharArray()) {
addCharacter(builder, ch);
}
}
return builder.toString();
}
private static void addCharacter(StringBuilder builder, char ch) {
switch (ch) {
case ' ':
builder.append('_');
break;
case '\n':
builder.append("\\n");
break;
case '\t':
builder.append("\\t");
break;
case '\r':
builder.append("\\r");
break;
case '\\':
case '\'':
case '"':
case '_':
case '?':
case '(':
case ')':
case '[':
case ']':
case '{':
case '}':
case '<':
case '>':
builder.append('\\');
builder.append(ch);
break;
default:
if (ch > ' ' && ch <= '~') {
builder.append(ch);
} else if (ch <= 0xFF) {
builder.append("\\x");
builder.append(String.format("%02X", (int) ch));
} else {
builder.append("\\u");
builder.append(String.format("%04X", (int) ch));
}
}
}
/**
* Displays the given parts with a bit of syntactic sugar.
* @param parts The parts to display
* @return The string that displays the given parts
*/
public static String displayParts(Object... parts) {
StringBuilder builder = new StringBuilder("[");
boolean first = true;
for (Object part : parts) {
if (first) {
first = false;
} else {
builder.append('|');
}
if (part == null) {
builder.append('?');
} else {
builder.append(display(part));
}
}
builder.append(']');
return builder.toString();
}
public static Object asDisplayWithTypes(final Object object) {
return new Object() {
public String toString() {
return displayWithTypes(object);
}
};
}
/**
* Displays the given object including type information.
* @param object The object to display
* @return The string that displays the given object
*/
public static String displayWithTypes(Object object) {
StringBuilder builder = new StringBuilder();
displayRecursive(object, builder, new Stack<>(), true);
return builder.toString();
}
public static Object asDisplay(final Object object) {
return new Object() {
public String toString() {
return display(object);
}
};
}
/**
* Displays the given object excluding type information.
* @param object The object to display
* @return The string that displays the given object
*/
public static String display(Object object) {
StringBuilder builder = new StringBuilder();
displayRecursive(object, builder, new Stack<>(), false);
return builder.toString();
}
/**
* Displays the given objects as an array excluding type information.
* @param first The first object to display
* @param second The first object to display
* @param remainder The remaining objects to display
* @return The string that displays the given objects
*/
public static String display(Object first, Object second, Object... remainder) {
Object[] array = new Object[remainder.length + 2];
array[0] = first;
array[1] = second;
System.arraycopy(remainder, 0, array, 2, remainder.length);
return display(array);
}
private static void displayRecursive(Object object, StringBuilder builder, Stack
© 2015 - 2025 Weber Informatics LLC | Privacy Policy