源码在:http://git.oschina.net/sp42/ajaxjs/blob/master/ajaxjs-base/src/com/ajaxjs/util/
字符串工具函数
是否空字符串
assertTrue(isEmptyString(""));
assertTrue(isEmptyString(" "));
assertTrue(isEmptyString(null));
Java String 有 split 却没有 join,这里实现一个
assertEquals(stringJoin(new String[] { "a", "b", "c" }, ","), "a,b,c");
assertEquals(stringJoin(new ArrayList<String>() {
private static final long serialVersionUID = 1L;
{
add("a");
add("b");
add("c");
}
}, ","), "a,b,c");
重复字符串 repeat 次并以 div 分隔
assertEquals(repeatStr("Hi", ",", 3), "Hi,Hi,Hi");
输入 a,看 a 里面是否包含另一个字符串 b,忽略大小写
assertTrue(containsIgnoreCase("abc", "A"));
使用正则的快捷方式
assertEquals(regMatch("^a", "abc"), "a");// 匹配结果,只有匹配第一个
assertEquals(regMatch("^a", "abc", 0), "a");// 可指定分组
assertEquals(regMatch("^a(b)", "abc", 1), "b");
URL 编码/解码,默认 UTF-8 编码
String str = "中国";
assertEquals(urlDecode(urlEncode(str)), str);
Base64 编码/解码
String str = "中国";
assertEquals(base64Decode(base64Encode(str)), str);
使用了 JDK 自带的 sun.misc.BASE64Decoder 实现。
MD5
String str = "中国";
assertEquals(md5("123123"), "4297F44B13955235245B2497399D7A93");
使用了 JDK 自带的 MessageDigest + javax.xml.bind.DatatypeConverter 实现。
字节转为 UTF-8 字符串
public static String byte2String(byte[] bytes);
public static String byte2String(String str);
public static String urlChinese(String str); // url 网址中文乱码处理
日期工具函数
import static org.junit.Assert.*;
import java.util.Date;
import static com.ajaxjs.util.DateTools.*;
import org.junit.Test;
import com.ajaxjs.util.DateTools;
public class TestDateTools {
@Test
public void testNow() {
assertNotNull(now()); // 返回当前时间的 YYYY-MM-dd HH:MM:ss 字符串类型
assertNotNull(now(DateTools.commonDateFormat)); // 返回当前时间,并对当前时间进行格式化
}
@Test
public void testFormat() {
Date date = Objet2Date("2009-07-25 11:16:09");
assertEquals(formatDate(date), formatDate(date, DateTools.commonDateFormat)); // 对输入的时间进行格式化,采用格式 yyyy-MM-dd HH:mm:ss
assertEquals(date.toString(), "Tue Jul 25 11:16:09 CST 2009");
assertEquals(Objet2Date(date).getTime(), date.getTime());
assertEquals(Objet2Date(date.getTime()).getTime(), date.getTime());
assertEquals(Objet2Date("2009-07-25 11:16:09").getTime(), date.getTime()); // 转换字符串类型的日期到 Date 类型
}
}
集合工具函数
集合是否为空
import static com.ajaxjs.util.collection.CollectionUtil.*;
// Array
assertTrue(!isNull(new Object[] { 1, 2 }));
assertTrue(!isNull(new String[] { "1" }));
assertTrue(isNull(new Object[] {}));
Object[] arr = null;
String[] strs = null;
assertTrue(isNull(arr));
assertTrue(isNull(strs));
// List
assertTrue(!isNull(new ArrayList<Object>() {
private static final long serialVersionUID = 1L;
{
add(1);
}
}));
assertTrue(isNull(new ArrayList<String>()));
assertTrue(!isNull(new ArrayList<Object>() {
private static final long serialVersionUID = 1L;
{
add(null);
}
}));
// Map
assertTrue(!isNull(new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;
{
put("foo", null);
}
}));
assertTrue(isNull(new HashMap<String, Object>()));
数组互换
import static com.ajaxjs.util.collection.CollectionUtil.*;
String str = "1,2,3";
int[] arr = new int[] { 1, 2, 3 };
// 当它们每一个都是数字的字符串形式,转换为整形的数组 "1,2,3, ..." --> [1, 2, ...]
assertEquals(Arrays.toString(strArr2intArr(str, ",")), Arrays.toString(arr));
// 整形数组转换为字符数组 [1, 2, ...] --> "1,2,3, ..."
assertEquals(Arrays.toString(int_arr2string_arr(arr)), Arrays.toString(new String[] { "1", "2", "3" }));
// List<String> 转换为字符串数组/数组效的话率更高一些
assertEquals(Arrays.toString(stringList2arr(new ArrayList<String>() {
private static final long serialVersionUID = 1L;
{
add("1");
add("2");
add("3");
}
})), Arrays.toString(new String[] { "1", "2", "3" }));
Map 数据处理
Map 转换为字符串,默认 & 作为分隔符
Map<String, Object> map = new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;
{
put("foo", null);
put("bar", 500);
put("zx", "hi");
}
};
@Test
public void testJoin() {
assertEquals("zx=hi&foo=null&bar=500", join(asString(map)));
}
Tips:怎么删掉最后一个分号?方法有很多,收集如下:
// 另外一种算法
for (String key : pair.keySet()) {
cookieStr += key + "=" + pair.get(key) + ";";
cookieStr = cookieStr.substring(0, cookieStr.length() - 1);
}
// 另外一种算法
int i = 0;
for(String key : hash.keySet()) {
...
if(++i != size)
buff.append(",");
}
// 另外一种算法,删除最后一个 ,
if (buff.length() > 1)
buff = buff.deleteCharAt(buff.length() - 1);
// 另外一种算法,删除最后一个 , ...
if(i != arr.length - 1)
str += ",";
Map 的泛型类型转换,从 Map<String, ?> 转换为 Map<String, String>
@Test
public void testAsString() {
assertEquals(asString(map).get("bar"), "500");
}
Map 的泛型类型转换,转换为 Map<String, Object>。 可选择类型转换真实值,如 "2"-->2,"true",-->true,"null"-->null。要求 String 类型才可以 CastRealValue TODO 这个是否需要要求这样?
@Test
public void testAsObject() {
assertEquals(asObject(new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;
{
put("foo", "null");
put("bar", "500");
put("zx", "hi");
}
}).get("bar"), "500");
assertEquals(asObject(new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;
{
put("foo", "null");
put("bar", "500");
put("zx", "hi");
}
}, true).get("bar"), 500);
}
Map<String, String[]> 转换为 Map<String, String>,其中 value[] 变成 , 分割的单个字符串。
assertEquals(toMap(new HashMap<String, String[]>() {
private static final long serialVersionUID = 1L;
{
put("foo", new String[] { "a", "b" });
put("bar", new String[] { "1", "c", "2" });
}
}).get("bar"), "1,c,2");
数据结构的简单转换 String[]-->Map
assertEquals(
toMap(new String[] { "a", "b", "d" }, new String[] { "1", "c", "2" }).get("a"),
1
);
assertEquals(
toMap(new String[] { "a=1", "b=2", "d=c" }).get("a"),
1
);
assertEquals(
toMap(new String[] { "a=%e4%bd%a0%e5%a5%bd", "b=2", "d=c" }, true).get("a"),
"你好"
);
时间: 2024-09-26 15:25:36