package com.braintreegateway.util; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.*; public class StringUtils { public static <T> String classToXMLName(Class<T> klass) { return dasherize(klass.getSimpleName()).toLowerCase(); } public static String dasherize(String str) { if (str == null) return null; return str.replaceAll("([A-Z]+)([A-Z][a-z])", "$1-$2"). replaceAll("([a-z])([A-Z])", "$1-$2"). replaceAll("_", "-"). toLowerCase(); } public static String getFullPathOfFile(String filename) { return getClassLoader().getResource(filename).getFile(); } private static ClassLoader getClassLoader() { return Thread.currentThread().getContextClassLoader(); } public static String inputStreamToString(InputStream inputStream) throws IOException { InputStreamReader inputReader = new InputStreamReader(inputStream); StringBuilder builder = new StringBuilder(); char[] buffer = new char[0x1000]; int bytesRead = inputReader.read(buffer, 0, buffer.length); while (bytesRead >= 0) { builder.append(buffer, 0, bytesRead); bytesRead = inputReader.read(buffer, 0, buffer.length); } return builder.toString(); } public static String nullIfEmpty(String str) { return str == null || str.length() == 0 ? null : str; } public static String underscore(String str) { if (str == null) return null; return str.replaceAll("([A-Z]+)([A-Z][a-z])", "$1_$2"). replaceAll("([a-z])([A-Z])", "$1_$2"). replaceAll("-", "_"). toLowerCase(); } public static String join(Object[] tokens, String delimiter) { if(tokens.length == 0) return ""; StringBuilder joined = new StringBuilder(); boolean first = true; for(Object token : tokens) { if(!first) joined.append(delimiter); else first = false; joined.append(token); } return joined.toString(); } public static String join(String delimiter, Object... tokens) { return join(tokens, delimiter); } public static String mapToString(Map<String, Object> map) { LinkedList<String> pairs = new LinkedList<String>(); ArrayList<String> keyList = new ArrayList<String>(map.keySet()); Collections.sort(keyList); for (String s : keyList) { Object value = map.get(s); String valueStr = toString(value); pairs.add(s + ": " + valueStr); } return "{" + join(", ", pairs.toArray()) + "}"; } @SuppressWarnings("unchecked") public static String toString(Object value) { if(value instanceof Map) return mapToString((Map<String, Object>) value); else if(value instanceof List) return listToString((List<Object>) value); else if(value == null) return "null"; else return value.toString().trim(); } public static String listToString(List<Object> value) { Object[] valueStrings = new Object[value.size()]; for (int i = 0; i < valueStrings.length; i++) { valueStrings[i] = toString(value.get(i)); } return "[" + join(", ", valueStrings) + "]"; } public static String unescapeUtf8(String encodedString) { int i = 0; int len = encodedString.length(); char c; StringBuffer buffer = new StringBuffer(len); while (i < len) { c = encodedString.charAt(i++); if (c == '\\') { if (i < len) { c = encodedString.charAt(i++); if (c == 'u') { c = (char) Integer.parseInt(encodedString.substring(i,i+4),16); i += 4; } } } buffer.append(c); } return buffer.toString(); } }