package com.doumee.core.utils;
|
|
import java.io.PrintWriter;
|
import java.io.StringWriter;
|
import java.util.*;
|
|
/**
|
* @author yezhihao
|
* https://gitee.com/yezhihao/jt808-server
|
*/
|
public class StringTools {
|
|
public static final int[] EMPTY = new int[0];
|
|
public static final Integer[] EMPTY_ = new Integer[0];
|
|
public static int[] toInts(String str, String delimiter) {
|
String[] split = str.split(delimiter);
|
int[] result = new int[split.length];
|
for (int i = 0; i < split.length; i++)
|
result[i] = Integer.parseInt(split[i]);
|
return result;
|
}
|
|
public static double[] toDoubles(String str, String delimiter) {
|
String[] split = str.split(delimiter);
|
double[] result = new double[split.length];
|
for (int i = 0; i < split.length; i++)
|
result[i] = Double.parseDouble(split[i]);
|
return result;
|
}
|
|
public static byte[] toBytes(String str, String delimiter) {
|
String[] split = str.split(delimiter);
|
byte[] result = new byte[split.length];
|
for (int i = 0; i < split.length; i++)
|
result[i] = (byte) Integer.parseInt(split[i]);
|
return result;
|
}
|
|
public static String merge(String delimiter, Collection value) {
|
if (value == null || value.size() == 0)
|
return null;
|
|
StringBuilder result = new StringBuilder(value.size() * 5);
|
for (Object id : value)
|
result.append(id).append(delimiter);
|
|
return result.substring(0, result.length() - 1);
|
}
|
|
public static String merge(String delimiter, Object... value) {
|
if (value == null || value.length == 0)
|
return null;
|
|
StringBuilder result = new StringBuilder(value.length * 5);
|
for (Object id : value)
|
result.append(id).append(delimiter);
|
|
return result.substring(0, result.length() - 1);
|
}
|
|
public static String merge(String delimiter, int... value) {
|
if (value == null || value.length == 0)
|
return null;
|
|
StringBuilder result = new StringBuilder(value.length * 5);
|
for (int id : value)
|
result.append(id).append(delimiter);
|
|
return result.substring(0, result.length() - 1);
|
}
|
|
public static int[] toInts(Integer[] src) {
|
if (src == null || src.length == 0)
|
return EMPTY;
|
|
int[] dest = new int[src.length];
|
for (int i = 0; i < src.length; i++)
|
dest[i] = src[i];
|
return dest;
|
}
|
|
public static Integer[] toInts(int[] src) {
|
if (src == null || src.length == 0)
|
return EMPTY_;
|
|
Integer[] dest = new Integer[src.length];
|
for (int i = 0; i < src.length; i++)
|
dest[i] = src[i];
|
return dest;
|
}
|
|
public static Integer parseInt(String num) {
|
return parseInt(num, null);
|
}
|
|
public static Integer parseInt(String num, Integer defVal) {
|
if (isBlank(num))
|
return defVal;
|
try {
|
return Integer.parseInt(num);
|
} catch (NumberFormatException e) {
|
return defVal;
|
}
|
}
|
|
public static String toUnderline(String str) {
|
StringBuilder result = new StringBuilder(str.length() + 4);
|
char[] chars = str.toCharArray();
|
|
result.append(Character.toLowerCase(chars[0]));
|
|
for (int i = 1; i < chars.length; i++) {
|
char c = chars[i];
|
if (Character.isUpperCase(c))
|
result.append('_').append(Character.toLowerCase(c));
|
else
|
result.append(c);
|
}
|
return result.toString();
|
}
|
|
public static String subPrefix(String str, String prefix) {
|
if (str != null && str.startsWith(prefix))
|
str = str.substring(prefix.length());
|
return str;
|
}
|
|
public static Map newMap(Object... entrys) {
|
Map result = new HashMap((int) (entrys.length / 1.5) + 1);
|
for (int i = 0; i < entrys.length; )
|
result.put(entrys[i++], entrys[i++]);
|
return result;
|
}
|
|
public static boolean isNotBlank(String str) {
|
return !isBlank(str);
|
}
|
|
public static boolean isBlank(String str) {
|
return str == null || str.length() == 0 || str.trim().length() == 0;
|
}
|
|
public static <T> T getDefault(T value, T defaultValue) {
|
return value != null ? value : defaultValue;
|
}
|
|
public static String leftPad(String str, int size, char ch) {
|
if(str ==null){
|
str = "";
|
}
|
int length = str.length();
|
int pads = size - length;
|
if (pads > 0) {
|
char[] result = new char[size];
|
str.getChars(0, length, result, pads);
|
while (pads > 0)
|
result[--pads] = ch;
|
return new String(result);
|
}
|
return str;
|
}
|
public static String leftTrip(String str, char ch) {
|
if(str==null ){
|
return null;
|
}
|
int index = 0;
|
while (index < str.length() && str.charAt(index) == ch) {
|
index++;
|
}
|
String result = str.substring(index);
|
return str;
|
}
|
|
public static int[] toArray(Collection<Integer> list) {
|
if (list == null || list.isEmpty())
|
return null;
|
|
int[] result = new int[list.size()];
|
int i = 0;
|
for (Integer e : list) {
|
if (e != null)
|
result[i++] = e;
|
}
|
return result;
|
}
|
|
public static Set<Integer> toSet(int... num) {
|
if (num == null || num.length == 0) {
|
return Collections.EMPTY_SET;
|
}
|
Set<Integer> result;
|
if (num.length <= 3) {
|
result = new TreeSet<>();
|
} else {
|
result = new HashSet<>(num.length << 1);
|
}
|
for (int i : num) {
|
result.add(i);
|
}
|
return result;
|
}
|
|
public static boolean isNum(String val) {
|
if (isBlank(val)) {
|
return false;
|
}
|
int sz = val.length();
|
for (int i = 0; i < sz; i++) {
|
if (!Character.isDigit(val.charAt(i))) {
|
return false;
|
}
|
}
|
return true;
|
}
|
|
public static String getStackTrace(final Throwable throwable) {
|
final StringWriter sw = new StringWriter(7680);
|
final PrintWriter pw = new PrintWriter(sw, true);
|
throwable.printStackTrace(pw);
|
return sw.getBuffer().toString();
|
}
|
|
private static final char[] hexCode = "0123456789abcdef".toCharArray();
|
|
public static String bytes2Hex(byte[] bytes) {
|
char[] hex = new char[bytes.length << 1];
|
for (int j = 0, i = 0; i < bytes.length; i++) {
|
byte b = bytes[i];
|
hex[j++] = hexCode[(b >> 4) & 0xF];
|
hex[j++] = hexCode[(b & 0xF)];
|
}
|
return new String(hex);
|
}
|
|
public static byte[] hex2Bytes(String hex) {
|
final int len = hex.length();
|
|
if (len % 2 != 0) {
|
throw new IllegalArgumentException("hexBinary needs to be even-length: " + hex);
|
}
|
|
byte[] out = new byte[len >> 1];
|
for (int i = 0; i < len; i += 2) {
|
|
int h = hexToBin(hex.charAt(i));
|
int l = hexToBin(hex.charAt(i + 1));
|
if (h == -1 || l == -1) {
|
throw new IllegalArgumentException("contains illegal character for hexBinary: " + hex);
|
}
|
out[i >> 1] = (byte) (h * 16 + l);
|
}
|
return out;
|
}
|
|
public static int hexToBin(char ch) {
|
if ('0' <= ch && ch <= '9') {
|
return ch - '0';
|
}
|
if ('A' <= ch && ch <= 'F') {
|
return ch - ('A' - 10);
|
}
|
if ('a' <= ch && ch <= 'f') {
|
return ch - ('a' - 10);
|
}
|
return -1;
|
}
|
}
|