package com.arronlong.common.util.string;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.arronlong.common.util.reflect.ReflectUtils;
import com.arronlong.common.util.string.enums.DataFormat;
import com.google.common.base.Strings;
public class StringUtils {
public static boolean isNullOrEmpty(String str){
return Strings.isNullOrEmpty(str);
}
public static String emptyToNull(String str){
return Strings.emptyToNull(str);
}
public static String nullToEmpty(String str){
return Strings.nullToEmpty(str);
}
public static <T> T emptyToNull(T obj){
Field[] fields = ReflectUtils.getFields(obj.getClass());
for (Field field : fields) {
field.setAccessible(true);
if(java.util.List.class.isAssignableFrom(field.getType())){
try {
Collection<?> c = (Collection<?>) field.get(obj);
for (Object object : c) {
emptyToNull(object);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}else{
try {
if(field.get(obj).equals("")){
field.set(obj, null);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return obj;
}
public static <T> T nullToEmpty(T obj){
Field[] fields = ReflectUtils.getFields(obj.getClass());
for (Field field : fields) {
field.setAccessible(true);
if(java.util.List.class.isAssignableFrom(field.getType())){
try {
Collection<?> c = (Collection<?>) field.get(obj);
for (Object object : c) {
emptyToNull(object);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}else{
try {
field.set(obj, Strings.nullToEmpty(String.valueOf(field.get(obj))));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return obj;
}
public static String padEnd(String str, int minLength, char padChar){
return Strings.padEnd(str, minLength, padChar);
}
public static String padStart(String str, int minLength, char padChar){
return Strings.padStart(str, minLength, padChar);
}
public static String repeat(String str, int count){
return Strings.repeat(str, count);
}
public static String subStrStart(String str, int end){
return subStr(str, 0, end);
}
public static String subStrEnd(String str, int start){
return subStr(str, str.length()-start, str.length());
}
public static String subStr(String str, int length) throws RuntimeException{
if(str==null){
throw new NullPointerException("字符串为null");
}
int len = str.length();
if(len<Math.abs(length)){
throw new StringIndexOutOfBoundsException("最大长度为"+len+",索引超出范围为:"+(len-Math.abs(length)));
}
if(length>=0){
return subStr(str, 0,length);
}else{
return subStr(str, len-Math.abs(length), len);
}
}
public static String subStr(String str, int start, int end) throws RuntimeException{
if(str==null){
throw new NullPointerException("");
}
int len = str.length();
int s = 0;
int e = 0;
if(len<Math.abs(start)){
throw new StringIndexOutOfBoundsException("最大长度为"+len+",索引超出范围为:"+(len-Math.abs(start)));
}else if(start<0){
s = len - Math.abs(start);
}else if(start<0){
s=0;
}else{
s = start;
}
if(len<Math.abs(end)){
throw new StringIndexOutOfBoundsException("最大长度为"+len+",索引超出范围为:"+(len-Math.abs(end)));
}else if (end <0){
e = len - Math.abs(end);
}else if (end==0){
e = len;
}else{
e = end;
}
if(e<s){
throw new StringIndexOutOfBoundsException("截至索引小于起始索引:"+(e-s));
}
return str.substring(s, e);
}
public static String join(String[] strs, String splitStr){
if(strs!=null){
if(strs.length==1){
return strs[0];
}
StringBuffer sb = new StringBuffer();
for (String str : strs) {
sb.append(str).append(splitStr);
}
if(sb.length()>0){
sb.delete(sb.length()-splitStr.length(), sb.length());
}
return sb.toString();
}
return null;
}
public static String fmt(String str, DataFormat fmt) {
String result = "";
switch (fmt.getCode()) {
case 0://JSON
result = JsonXmlUtils.xml2JSON(str);
break;
case 1://XML
result = JsonXmlUtils.json2XML(str);
break;
default:
result = str;
break;
}
return result;
}
public static String[] regex(String regex, String from){
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(from);
List<String> results = new ArrayList<String>();
while(matcher.find()){
for (int i = 0; i < matcher.groupCount(); i++) {
results.add(matcher.group(i+1));
}
}
return results.toArray(new String[]{});
}
public static String format(String template, String replaceStr, Object... paras){
int len = template.split(replaceStr).length;
StringBuffer buf = new StringBuffer();
for (int i=0;i<len; i++) {
buf.append(template.split(replaceStr)[i]);
if(i<paras.length){
buf.append(paras[i]);
}
}
return buf.toString();
}
public static void main(String[] args) {
String template = "<root><id></id><name>#@#</name><tel>#@#</tel><addr>#@#</addr></root>";
String[] paras={"001","aaa","","海淀"};
String data = StringUtils.format(template, "#@#", paras);
System.out.println(data);
}
}