我的 Java 工具函数汇总

标签: stringJava
1008人阅读 评论(0) 收藏 举报
分类:

源码在: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"),
    "你好"
);
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1928046次
    • 积分:19407
    • 等级:
    • 排名:第496名
    • 原创:252篇
    • 转载:19篇
    • 译文:55篇
    • 评论:936条
    我的开源项目
    最新评论