package com.anthony.library.utils;
import android.content.Context;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.style.ClickableSpan;
import android.view.View;
import com.anthony.library.R;
import java.lang.reflect.Field;
import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringUtils {
public static boolean isEmpty(CharSequence str) {
return str == null || str.length() == 0;
}
public static String getMoney(float cost) {
DecimalFormat decimalFormat = new DecimalFormat("0.00");
return "¥" + decimalFormat.format(cost);
}
public static class PrimaryClickableSpan extends ClickableSpan {
private Context context;
public PrimaryClickableSpan(Context context) {
this.context = context;
}
@Override
public void onClick(View widget) {
// do nothing
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(context.getResources().getColor(R.color.colorPrimary));
ds.setUnderlineText(false);
}
}
public static int getChineseCount(CharSequence str) {
String regEx = "[\\u4e00-\\u9fa5]";
int count = 0;
if (!TextUtils.isEmpty(str)) {
Pattern p = Pattern.compile(regEx);// 计算有几个unicode字
Matcher m = p.matcher(str);
while (m.find()) {
for (int i = 0; i <= m.groupCount(); i++) {
count = count + 1;
}
}
count += str.length();
}
return count;
}
/**
* return if str is empty
*
* @param str
* @return
*/
public static boolean isEmpty(String str) {
if (str == null || str.length() == 0 || str.equalsIgnoreCase("null") || str.isEmpty() || str.equals("")) {
return true;
} else {
return false;
}
}
/**
* decode Unicode string
*
* @param s
* @return
*/
public static String decodeUnicodeStr(String s) {
StringBuilder sb = new StringBuilder(s.length());
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c == '\\' && chars[i + 1] == 'u') {
char cc = 0;
for (int j = 0; j < 4; j++) {
char ch = Character.toLowerCase(chars[i + 2 + j]);
if ('0' <= ch && ch <= '9' || 'a' <= ch && ch <= 'f') {
cc |= (Character.digit(ch, 16) << (3 - j) * 4);
} else {
cc = 0;
break;
}
}
if (cc > 0) {
i += 5;
sb.append(cc);
continue;
}
}
sb.append(c);
}
return sb.toString();
}
/**
* encode Unicode string
*
* @param s
* @return
*/
public static String encodeUnicodeStr(String s) {
StringBuilder sb = new StringBuilder(s.length() * 3);
for (char c : s.toCharArray()) {
if (c < 256) {
sb.append(c);
} else {
sb.append("\\u");
sb.append(Character.forDigit((c >>> 12) & 0xf, 16));
sb.append(Character.forDigit((c >>> 8) & 0xf, 16));
sb.append(Character.forDigit((c >>> 4) & 0xf, 16));
sb.append(Character.forDigit((c) & 0xf, 16));
}
}
return sb.toString();
}
// 基本数据类型
private final static String[] types = {"int", "java.lang.String", "boolean", "char",
"float", "double", "long", "short", "byte"};
/**
* 将对象转化为String
*
* @param object
* @return
*/
public static <T> String objectToString(T object) {
if (object == null) {
return "Object{object is null}";
}
if (object.toString().startsWith(object.getClass().getName() + "@")) {
StringBuilder builder = new StringBuilder(object.getClass().getSimpleName() + "{");
Field[] fields = object.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
boolean flag = false;
for (String type : types) {
if (field.getType().getName().equalsIgnoreCase(type)) {
flag = true;
Object value = null;
try {
value = field.get(object);
} catch (IllegalAccessException e) {
value = e;
} finally {
builder.append(String.format("%s=%s, ", field.getName(),
value == null ? "null" : value.toString()));
break;
}
}
}
if (!flag) {
builder.append(String.format("%s=%s, ", field.getName(), "Object"));
}
}
return builder.replace(builder.length() - 2, builder.length() - 1, "}").toString();
} else {
return object.toString();
}
}
}