我的 Java 工具函数汇总

源码在: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

我的 Java 工具函数汇总的相关文章

JQuery工具函数汇总_jquery

在jQuery中,工具函数是指直接依附于jQuery对象,针对jQuery对象本身定义的方法,即全局性的,我们统称为工具函数,或Utilites函数 主要作用于:字符串.数组.对象 API:工具函数 调用格式:   $.函数名()或jQuery.函数名() 字符串操作: $.trim():去除字符串左右两边的空格 数组和对象操作: $.each():遍历数组 $.each(array,function(index,value){}):array:数组变量,index:元素下标,从0开始,valu

以前编写JSP网站时写的一些工具函数

js|函数 初学JSP时,写了一些工具函数因为不太会用JAVA下的正则表达式也只能这么写啦!发出来让大家批评批评提点意见!有几个函数不算是自己写的希望爱挑剌的朋友嘴下留情!我是新手我怕谁,脸皮不行的人水平也上不去呀.嘻嘻.. package mxzc.web.strctrl;public class StringCtrl{/********************************************public synchronized String HTMLcode(String

JNI的替代者:如何使用JNR访问Java外部函数接口(jnr-ffi)

1. JNR简单介绍 继上文"JNI的替代者-使用JNA访问Java外部函数接口",我们知道JNI越来越不受欢迎,JNI是编写Java本地方法以及将Java虚拟机嵌入本地应用程序的标准编程接口.它管理着JVM和非托管的本地环境之间的边界,提供数据编组和对象生命周期管理协议. 根据JEP(JDK增强提案) 191,JNI在下列几个方面最令开发人员痛苦: 需要开发人员编写C代码,这意味着他们需要具备一个完全不同于Java的世界的专业知识. 由于开发人员必须对JVM如何管理内存和代码多少有一

Java终止函数详解

Java终止函数是什么? 对于对象而言,Java 终止函数履行最后的确认工作.这与Java 结构函数是相反的,Java 结构函数创 建以及初始化了一个Java类实例.当一个对象不在被需要以及这些资源必须被用于其它对象的时候,在一 个类实例或者发行的系统资源,比如说文件描述符或者网络插孔连接上,Java 终止函数可以被用来清除 任务.你不需要证据或者为终止函数返回任何值.遗憾的是当一个类或者接口被载入的时候,目前的Java 语言的介绍中没有任何关于终止函数用于Java类或者接口的解释.让我们进一步

jQuery之工具函数

  jquery为我们提供了操作数组和对象的工具函数,方便和简化了我们对它们的操作.今天我们就进入jQuery的工具函数的复习.   jQuery给我们提供了主要有5类工具函数: URL 字符串操作 数组和对象操作 测试操作 浏览器 1:URL操作: $.param(obj) 返回 :string: 说明:将jquery对象按照name/value 或者key/value序列化为URL参数,用&连接. 示例: var obj ={name:zh,age:20};  alert(jQuery.pa

js实现的光标位置工具函数示例_javascript技巧

本文实例讲述了js实现的光标位置工具函数.分享给大家供大家参考,具体如下: 这里介绍的一款textarea中光标位置工具函数的例子. html代码: <p>文本框:</p> <textarea name="" id="textarea" cols="30" rows="10"> sASASADASDasfaDFDsfsDFAfdFADf </textarea> <butto

jQuery源码分析-03构造jQuery对象-工具函数_jquery

作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 声明:本文为原创文章,如需转载,请注明来源并保留原文链接. 读读写写,不对的地方请告诉我,多多交流共同进步,本章的的PDF等本章写完了发布. jQuery源码分析系列的目录请查看 http://nuysoft.iteye.com/blog/1177451,想系统的好好写写,目前还是从我感兴趣的部分开始,如果大家有对哪个模块感兴趣的,建议优先分析的,可以告诉我,一起学习. 3.4 其他静态工具函数

介绍一组中文处理工具函数

函数|中文 <?/*    中文处理工具函数--- 空格 ---      string GBspace(string) --------- 每个中文字之间加空格      string GBunspace(string) ------- 每个中文字之间的空格清除      string clear_space(string) ------- 用来清除多余的空格 --- 转换 ---      string GBcase(string,offset) --- 将字符串内的中英文字转换大小写   

java工具之javadoc和jar浅学

ado java工具之javadoc和jar1,javadoc注释标记 /** */格式如:/***Title:Killer类<br>*@author Killer*@version 1.00*/其中<br>表示换行,但是有@标志会自动换行下来对Killer构造方法批注/***这是Killer类的构造函数*@param name Killer的名字*/其中@param <参数名称><参数说明>使用说明:javadoc -d Killer -version -