java常用工具类!
2015-12-01 15:59
543 查看
1日期工具类
2集合工具类
3数组工具类
2集合工具类
3数组工具类
1、日期工具类
import org.apache.commons.lang.time.DateUtils; import java.io.IOException; import java.net.URL; import java.net.URLConnection; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateUtil extends DateUtils { public final static String PATTERN_SIMPLE = "yyyy-MM-dd"; public final static String PATTERN_SIMPLE_EXT = "yyyy.MM.dd"; public final static String PATTERN_WHOLE = "yyyy-MM-dd HH:mm:ss"; public final static String PATTERN_COMPACT = "yyyyMMddHHmmss"; public final static String PATTERN_COMPACT_MSEC = "yyyyMMddHHmmsssss"; public final static String PATTERN_SUCCINCT = "yyyyMMdd"; /** * 字符串转日期 * * @param str * @param pattern * @return */ public static Date strTodate(String str, String pattern) { Date date = null; SimpleDateFormat sdf = new SimpleDateFormat(pattern); try { date = sdf.parse(str); } catch (ParseException e) { // 不能转换时返回null } return date; /** * 获取当前时间前几个月的时间 * * @param mouths 月份 * @return */ public static String findDateFrom(int mouths, String format) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, -mouths); Date findDate = calendar.getTime(); SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(findDate); } public static Date searchWeekDate(int days, String format) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 7); String day = calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DATE); return DateUtil.strTodate(day, format); } /** * 将日期转化成yyyy-mm-dd格式的字符串 * * @param date * @return */ public static String dateToString(Date date, String format) { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(date); } /** * 获得两个时间相差的天数 * * @param fDate * @param sDate * @return 两个日期相差的天数 * @throws Exception */ public static long getDiffOfTwoDate(String fDate, String sDate, boolean isAbs) throws Exception { Date fTime = TimeUtil.toDate(fDate, PATTERN_SIMPLE); Date sTime = TimeUtil.toDate(sDate, PATTERN_SIMPLE); return getBetweenDiffDay(fTime, sTime, isAbs); } /** * 取2个时间相差的天数 * * @param date1 * @param date2 * @param isAbs true:取绝对值 false:差值可能是负数 * @return * @throws Exception */ public static long getBetweenDiffDay(Date date1, Date date2, boolean isAbs) throws Exception { long date1Value = date1.getTime(); long date2Value = date2.getTime(); long diff = (date1Value - date2Value) / (24 * 3600 * 1000); if (isAbs) { return Math.abs(diff); } else { return diff; } } /** * 获取网络时间 * * @param @return * @return boolean * @throws IOException * @throws * @Description: TODO * @author yokoboy * @date 2015-5-26 */ public static String judgeNewYearTime() throws IOException { //取得资源对象 URL url = new URL("http://www.bjtime.cn"); //生成连接对象 URLConnection uc = url.openConnection(); //发出连接 uc.connect(); long time = uc.getDate(); Date date = new Date(time); String dt = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss").format(date); return dt; } public static String getInterval(Date createAt) { // 定义最终返回的结果字符串。 String interval = null; long millisecond = new Date().getTime() - createAt.getTime(); long second = millisecond / 1000; if (second <= 0) { second = 0; } if (second == 0) { interval = "刚刚"; } else if (second < 30) { interval = second + "秒以前"; } else if (second >= 30 && second < 60) { interval = "半分钟前"; } else if (second >= 60 && second < 60 * 60) {//大于1分钟 小于1小时 long minute = second / 60; interval = minute + "分钟前"; } else if (second >= 60 * 60 && second < 60 * 60 * 24) {//大于1小时 小于24小时 long hour = (second / 60) / 60; if (hour <= 3) { interval = hour + "小时前"; } else { interval = "今天" + getFormatTime(createAt, "HH:mm"); } } else if (second >= 60 * 60 * 24 && second <= 60 * 60 * 24 * 2) {//大于1D 小于2D interval = "昨天" + getFormatTime(createAt, "HH:mm"); } else if (second >= 60 * 60 * 24 * 2 && second <= 60 * 60 * 24 * 7) {//大于2D小时 小于 7天 long day = ((second / 60) / 60) / 24; interval = day + "天前"; } else if ( second <= 60 * 60 * 24 * 365 && second >= 60 * 60 * 24 * 7) {//大于7天小于365天 interval = getFormatTime(createAt, "MM-dd HH:mm"); } else if (second >= 60 * 60 * 24 * 365) {//大于365天 interval = getFormatTime(createAt, "yyyy-MM-dd HH:mm"); } else { interval = "0"; } return interval; } public static String getFormatTime(Date date, String Sdf) { return (new SimpleDateFormat(Sdf)).format(date); } public static void main(String[] args) { try { System.out.println(getInterval(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2014-08-03 12:12:12"))); } catch (ParseException e) { e.printStackTrace(); } } }
2、集合工具类
package com.easyExchangeShop.test; import org.apache.poi.ss.formula.functions.T; import java.text.Collator; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * Created by benny on 2015/12/2. */ public class CollectionUtil { private Collator sortRule = Collator.getInstance(java.util.Locale.CHINA);//排序规则 /** * 对集合按照拼音首字母排序 * @param sortlist * @return */ public List<T> sortByFirstWord(List<T> sortlist) { Collections.sort(sortlist, sortRule); return sortlist; } /** * 对数组按照拼音首字母排序并转换成集合 * @param arr * @return */ public List<String> arrSortByFirstWord(String[] arr) { //arr = new String[]{"刘刘", "李飞", "王五", "老三", "贝贝", "啊三"}; Arrays.sort(arr, sortRule); List<String> list = Arrays.asList(arr); return list; } }
3、数组工具类
package iminto.util.common; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; /** * 数组操作辅助类,支持int,char,boject,String类型 */ public class ArrayHelper { /** * 锁定创建 */ private ArrayHelper() { } /** * * 计算数组中的单元数目或对象中的属性个数 * 当 arr 为 null 时返回 0。 * * @param arr * @return */ public static int sizeOf(int[] arr) { return arr == null ? 0 : arr.length; } /** * * 合并一个或多个数组 * 当 arr 为 null 时返回 new int[0] 。 * * @param arrs * @return */ public static int[] merge(int[]... arrs) { int[] result = new int[0]; if (arrs != null) { int count = 0; for (int i = 0; i < arrs.length; i++) { count += arrs[i].length; } result = new int[count]; int arg; int k = 0; for (int i = 0; i < arrs.length; i++) { if (arrs[i] == null) { continue; } for (int j = 0; j < arrs[i].length; j++) { arg = arrs[i][j]; result[k] = arg; k++; } } } return result; } /** * * 计算数组的差集 * 注意: * aArr 为null时 返回 bArr(可能为 null)。 * bArr 为null时 返回 aArr。 * 无差集时返回 new int[0]; * * @param aArr * @param bArr * @return */ public static int[] diff(int[] aArr, int[] bArr) { { if (aArr == null) { return bArr; } if (bArr == null) { return aArr; } } int[] cArr = new int[aArr.length + bArr.length]; int idx = 0; /** * 检查 a 中那些元 在 b 中不存在 */ for (int i = 0; i < aArr.length; i++) { if (!inArray(bArr, aArr[i])) { cArr[idx++] = aArr[i]; } } /** * 检查 b 中那些元 在 a 中不存在 */ for (int i = 0; i < bArr.length; i++) { if (!inArray(aArr, bArr[i])) { cArr[idx++] = bArr[i]; } } // int[] dArr = new int[idx]; System.arraycopy(cArr, 0, dArr, 0, dArr.length); return dArr; } /** * * 返回一个数组的全复制 * 当 arr 为 null 时返回 new int[0] 。 * * @param arr * @return */ public static int[] copyOf(int[] arr) { int[] carr = new int[0]; if (arr != null) { carr = new int[arr.length]; System.arraycopy(arr, 0, carr, 0, arr.length); } return carr; } /** * * 返回一个数组的复制 * 当 arr 为 null 时返回 new int[0] 。 * * @param arr * @param i * @return */ public static int[] copyOf(int[] arr, int i) { int[] carr = new int[0]; if (arr != null) { if (i > arr.length) { i = arr.length; } carr = new int[i]; System.arraycopy(arr, 0, carr, 0, i); } return carr; } /** * * 创建一个Map,用一个数组的值作为其键名,另一个数组的值作为其值 * 当键为空或无单元时返回空Map,否则以键数组为主导填充Map。值不足时填充null。 * 注意:Map中键顺序并不一定与参数keys顺序相同。 * @param <T> * @param <V> * @param keys * @param values * @return */ public static <T, V> Map<T, V> combine(T[] keys, V[] values) { Map<T, V> map = new HashMap<T, V>(); if (keys != null && keys.length > 0) { int vsize = values == null ? 0 : values.length; for (int i = 0; i < keys.length; i++) { if (i >= vsize) { map.put(keys[i], null); } else { map.put(keys[i], values[i]); } } } return map; } /** * * 从数组中随机取出一个或多个单元 * 当 arr 为 null 时返回 new int[0]。 * * @param arr * @return */ public static int[] random(int[] arr) { if (arr == null) { return new int[0]; } int count = new Random().nextInt(arr.length); count = count > 0 ? count : 1; return random(arr, count); } /** * * 将数组打乱 * 当 arr 为 null 时返回 new int[0]。 * * @param arr * @return */ public static int[] shuffle(int[] arr) { if (arr == null) { return new int[0]; } return random(arr, arr.length); } /** * * 随机取出固定数量的元素 * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle} * 当 arr 为 null 时返回 new int[0]。 * * @param arr * @param count * @return */ public static int[] random(int[] arr, int count) { int[] rarr = new int[0]; if (arr != null) { if (arr.length < count) { count = arr.length; } Random random = new Random(); int i = 0; int num = 0; rarr = new int[count]; int[] keys = new int[count]; for (int j = 0; j < keys.length; j++) { keys[j] = -1; } do { num = random.nextInt(arr.length); if (!inArray(keys, num)) { keys[i] = num; rarr[i] = arr[num]; i++; } } while (i < count); } return rarr; } /** * * 检查数组中是否存在某个值 * * @param arr * @param search * @return */ public static boolean inArray(int[] arr, int search) { if (arr != null) { for (int i = 0; i < arr.length; i++) { if (arr[i] == search) { return true; } } } return false; } /** * * 检查数组中是否存在某几个值 * * @param arr * @param search * @return */ public static boolean inArray(int[] arr, int[] search) { if (search != null) { for (int i = 0; i < search.length; i++) { if (!inArray(arr, search[i])) { return false; } } return true; } return false; } /** * * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。 * * @param arr * @param search * @return */ public static int search(int[] arr, int search) { if (arr != null) { for (int i = 0; i < arr.length; i++) { if (arr[i] == search) { return i; } } } return -1; } /** * * 返回一个单元顺序相反的数组 * 当 arr 为 null 时返回 new int[0]。 * * @param arr * @return */ public static int[] reverse(int[] arr) { int[] rarr = new int[0]; if (arr != null) { rarr = new int[arr.length]; int j = 0; for (int i = arr.length - 1; i >= 0; i--) { rarr[j++] = arr[i]; } } return rarr; } /** * 使用间隔符连接 * @param ints * @param sep * @return */ public static String join(int[] ints, String sep) { StringBuilder strBuilder = new StringBuilder(); if (ints != null) { for (int i = 0; i < ints.length; i++) { strBuilder.append(ints[i]); if (i < ints.length - 1) { strBuilder.append(sep); } } } return strBuilder.toString(); } /** * 计算所有单元的合 * @param ints * @param sep * @return */ public static int sum(int[] ints) { int sum = 0; if (ints != null) { for (int i = 0; i < ints.length; i++) { sum += ints[i]; } } return sum; } /** * char array tools * ===================== */ /** * * 计算数组中的单元数目或对象中的属性个数 * 当 arr 为 null 时返回 0。 * * @param arr * @return */ public static int sizeOf(char[] arr) { return arr == null ? 0 : arr.length; } /** * * 合并一个或多个数组 * 当 arr 为 null 时返回 new char[0] 。 * * @param arrs * @return */ public static char[] merge(char[]... arrs) { char[] result = new char[0]; if (arrs != null) { char count = 0; for (char i = 0; i < arrs.length; i++) { count += arrs[i].length; } result = new char[count]; char arg; char k = 0; for (char i = 0; i < arrs.length; i++) { if (arrs[i] == null) { continue; } for (char j = 0; j < arrs[i].length; j++) { arg = arrs[i][j]; result[k] = arg; k++; } } } return result; } /** * * 计算数组的差集 * 注意: * aArr 为null时 返回 bArr(可能为 null)。 * bArr 为null时 返回 aArr。 * 无差集时返回 new char[0]; * * @param aArr * @param bArr * @return */ public static char[] diff(char[] aArr, char[] bArr) { { if (aArr == null) { return bArr; } if (bArr == null) { return aArr; } } char[] cArr = new char[aArr.length + bArr.length]; char idx = 0; /** * 检查 a 中那些元 在 b 中不存在 */ for (int i = 0; i < aArr.length; i++) { if (!inArray(bArr, aArr[i])) { cArr[idx++] = aArr[i]; } } /** * 检查 b 中那些元 在 a 中不存在 */ for (int i = 0; i < bArr.length; i++) { if (!inArray(aArr, bArr[i])) { cArr[idx++] = bArr[i]; } } // char[] dArr = new char[idx]; System.arraycopy(cArr, 0, dArr, 0, dArr.length); return dArr; } /** * * 返回一个数组的全复制 * 当 arr 为 null 时返回 new char[0] 。 * * @param arr * @return */ public static char[] copyOf(char[] arr) { char[] carr = new char[0]; if (arr != null) { carr = new char[arr.length]; System.arraycopy(arr, 0, carr, 0, arr.length); } return carr; } /** * * 返回一个数组的复制 * 当 arr 为 null 时返回 new char[0] 。 * * @param arr * @param i * @return */ public static char[] copyOf(char[] arr, int i) { char[] carr = new char[0]; if (arr != null) { if (i > arr.length) { i = arr.length; } carr = new char[i]; System.arraycopy(arr, 0, carr, 0, i); } return carr; } /** * * 从数组中随机取出一个或多个单元 * 当 arr 为 null 时返回 new char[0]。 * * @param arr * @return */ public static char[] random(char[] arr) { if (arr == null) { return new char[0]; } int count = new Random().nextInt(arr.length); count = count > 0 ? count : 1; return random(arr, count); } /** * * 将数组打乱 * 当 arr 为 null 时返回 new char[0]。 * * @param arr * @return */ public static char[] shuffle(char[] arr) { if (arr == null) { return new char[0]; } return random(arr, arr.length); } /** * * 随机取出固定数量的元素 * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle} * 当 arr 为 null 时返回 new char[0]。 * * @param arr * @param count * @return */ public static char[] random(char[] arr, int count) { char[] rarr = new char[0]; if (arr != null) { if (arr.length < count) { count = arr.length; } Random random = new Random(); int i = 0; int num = 0; rarr = new char[count]; int[] keys = new int[count]; for (int j = 0; j < keys.length; j++) { keys[j] = 0; } do { num = random.nextInt(arr.length); if (!inArray(keys, num)) { keys[i] = num; rarr[i] = arr[num]; i++; } } while (i < count); } return rarr; } /** * * 检查数组中是否存在某个值 * * @param arr * @param search * @return */ public static boolean inArray(char[] arr, char search) { if (arr != null) { for (int i = 0; i < arr.length; i++) { if (arr[i] == search) { return true; } } } return false; } /** * * 检查数组中是否存在某几个值 * * @param arr * @param search * @return */ public static boolean inArray(char[] arr, char[] search) { if (search != null) { for (int i = 0; i < search.length; i++) { if (!inArray(arr, search[i])) { return false; } } return true; } return false; } /** * * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。 * * @param arr * @param search * @return */ public static int search(char[] arr, char search) { if (arr != null) { for (char i = 0; i < arr.length; i++) { if (arr[i] == search) { return i; } } } return -1; } /** * * 返回一个单元顺序相反的数组 * 当 arr 为 null 时返回 new char[0]。 * * @param arr * @return */ public static char[] reverse(char[] arr) { char[] rarr = new char[0]; if (arr != null) { rarr = new char[arr.length]; char j = 0; for (int i = arr.length - 1; i >= 0; i--) { rarr[j++] = arr[i]; } } return rarr; } /** * byte array tools * ===================== */ /** * * 计算数组中的单元数目或对象中的属性个数 * 当 arr 为 null 时返回 0。 * * @param arr * @return */ public static int sizeOf(byte[] arr) { return arr == null ? 0 : arr.length; } /** * * 合并一个或多个数组 * 当 arr 为 null 时返回 new byte[0] 。 * * @param arrs * @return */ public static byte[] merge(byte[]... arrs) { byte[] result = new byte[0]; if (arrs != null) { byte count = 0; for (byte i = 0; i < arrs.length; i++) { count += arrs[i].length; } result = new byte[count]; byte arg; byte k = 0; for (byte i = 0; i < arrs.length; i++) { if (arrs[i] == null) { continue; } for (byte j = 0; j < arrs[i].length; j++) { arg = arrs[i][j]; result[k] = arg; k++; } } } return result; } /** * * 计算数组的差集 * 注意: * aArr 为null时 返回 bArr(可能为 null)。 * bArr 为null时 返回 aArr。 * 无差集时返回 new byte[0]; * * @param aArr * @param bArr * @return */ public static byte[] diff(byte[] aArr, byte[] bArr) { { if (aArr == null) { return bArr; } if (bArr == null) { return aArr; } } byte[] cArr = new byte[aArr.length + bArr.length]; byte idx = 0; /** * 检查 a 中那些元 在 b 中不存在 */ for (int i = 0; i < aArr.length; i++) { if (!inArray(bArr, aArr[i])) { cArr[idx++] = aArr[i]; } } /** * 检查 b 中那些元 在 a 中不存在 */ for (int i = 0; i < bArr.length; i++) { if (!inArray(aArr, bArr[i])) { cArr[idx++] = bArr[i]; } } // byte[] dArr = new byte[idx]; System.arraycopy(cArr, 0, dArr, 0, dArr.length); return dArr; } /** * * 返回一个数组的全复制 * 当 arr 为 null 时返回 new byte[0] 。 * * @param arr * @return */ public static byte[] copyOf(byte[] arr) { byte[] carr = new byte[0]; if (arr != null) { carr = new byte[arr.length]; System.arraycopy(arr, 0, carr, 0, arr.length); } return carr; } /** * * 返回一个数组的复制 * 当 arr 为 null 时返回 new byte[0] 。 * * @param arr * @param i * @return */ public static byte[] copyOf(byte[] arr, int i) { byte[] carr = new byte[0]; if (arr != null) { if (i > arr.length) { i = arr.length; } carr = new byte[i]; System.arraycopy(arr, 0, carr, 0, i); } return carr; } /** * * 从数组中随机取出一个或多个单元 * 当 arr 为 null 时返回 new byte[0]。 * * @param arr * @return */ public static byte[] random(byte[] arr) { if (arr == null) { return new byte[0]; } int count = new Random().nextInt(arr.length); count = count > 0 ? count : 1; return random(arr, count); } /** * * 将数组打乱 * 当 arr 为 null 时返回 new byte[0]。 * * @param arr * @return */ public static byte[] shuffle(byte[] arr) { if (arr == null) { return new byte[0]; } return random(arr, arr.length); } /** * * 随机取出固定数量的元素 * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle} * 当 arr 为 null 时返回 new byte[0]。 * * @param arr * @param count * @return */ public static byte[] random(byte[] arr, int count) { byte[] rarr = new byte[0]; if (arr != null) { if (arr.length < count) { count = arr.length; } Random random = new Random(); int i = 0; int num = 0; rarr = new byte[count]; int[] keys = new int[count]; for (int j = 0; j < keys.length; j++) { keys[j] = 0; } do { num = random.nextInt(arr.length); if (!inArray(keys, num)) { keys[i] = num; rarr[i] = arr[num]; i++; } } while (i < count); } return rarr; } /** * * 检查数组中是否存在某个值 * * @param arr * @param search * @return */ public static boolean inArray(byte[] arr, byte search) { if (arr != null) { for (int i = 0; i < arr.length; i++) { if (arr[i] == search) { return true; } } } return false; } /** * * 检查数组中是否存在某几个值 * * @param arr * @param search * @return */ public static boolean inArray(byte[] arr, byte[] search) { if (search != null) { for (int i = 0; i < search.length; i++) { if (!inArray(arr, search[i])) { return false; } } return true; } return false; } /** * * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。 * * @param arr * @param search * @return */ public static int search(byte[] arr, byte search) { if (arr != null) { for (byte i = 0; i < arr.length; i++) { if (arr[i] == search) { return i; } } } return -1; } /** * 返回一个单元顺序相反的数组<br /> * 当 arr 为 null 时返回 new byte[0]。 * @param arr * @return */ public static byte[] reverse(byte[] arr) { byte[] rarr = new byte[0]; if (arr != null) { rarr = new byte[arr.length]; byte j = 0; for (int i = arr.length - 1; i >= 0; i--) { rarr[j++] = arr[i]; } } return rarr; } /** * 使用 Byte List填充一个byte array。(转换Byte List为byte array) * @param list * @return 当 list 为 null 时返回 new byte[0]。 */ public static byte[] fill(List<Byte> list) { if (list == null) { return new byte[0]; } int size = list.size(); byte[] arr = new byte[size]; for (int i = 0; i < size; i++) { arr[i] = list.get(i); } return arr; } /** * 使用 byte array填充一个 Byte List。(转换byte array为Byte List) * @param arr * @return 当 arr 为 null 时返回 new ArrayList<Byte>(size)。 */ public static List<Byte> fill(byte[] arr) { List<Byte> list = null; if (arr == null) { return new ArrayList<Byte>(0); } int size = arr.length; list = new ArrayList<Byte>(size); for (byte by : arr) { list.add(by); } return list; } /** * Object array tools * ===================== */ /** * * 计算数组中的单元数目或对象中的属性个数 * 当 arr 为 null 时返回 0。 * * @param arr * @return */ public static int sizeOf(Object[] arr) { return arr == null ? 0 : arr.length; } /** * * 合并一个或多个数组 * 当 arr 为 null 时返回 new Object[0]。 * * @param arrs * @return */ public static Object[] merge(Object[]... arrs) { Object[] result = new Object[0]; if (arrs != null) { int count = 0; for (int i = 0; i < arrs.length; i++) { count += arrs[i].length; } result = new Object[count]; Object arg; int k = 0; for (int i = 0; i < arrs.length; i++) { if (arrs[i] == null) { continue; } for (int j = 0; j < arrs[i].length; j++) { arg = arrs[i][j]; result[k] = arg; k++; } } } return result; } /** * * 计算数组的差集 * 注意: * aArr 为null时 返回 bArr(可能为 null)。 * bArr 为null时 返回 aArr。 * 无差集时返回 new Object[0]; * * @param aArr * @param bArr * @return */ public static Object[] diff(Object[] aArr, Object[] bArr) { { if (aArr == null) { return bArr; } if (bArr == null) { return aArr; } } Object[] cArr = new Object[aArr.length + bArr.length]; int idx = 0; /** * 检查 a 中那些元 在 b 中不存在 */ for (int i = 0; i < aArr.length; i++) { if (!inArray(bArr, aArr[i])) { cArr[idx++] = aArr[i]; } } /** * 检查 b 中那些元 在 a 中不存在 */ for (int i = 0; i < bArr.length; i++) { if (!inArray(aArr, bArr[i])) { cArr[idx++] = bArr[i]; } } // Object[] dArr = new Object[idx]; System.arraycopy(cArr, 0, dArr, 0, dArr.length); return dArr; } /** * * 返回一个数组的全复制 * 当 arr 为 null 时返回 new int[0] 。 * * @param arr * @return */ public static Object[] copyOf(Object[] arr) { Object[] carr = new Object[0]; if (arr != null) { carr = new Object[arr.length]; System.arraycopy(arr, 0, carr, 0, arr.length); } return carr; } /** * * 返回一个数组的复制 * 当 arr 为 null 时返回 new Object[0] 。 * * @param arr * @param i * @return */ public static Object[] copyOf(Object[] arr, int i) { Object[] carr = new Object[0]; if (arr != null) { if (i > arr.length) { i = arr.length; } carr = new Object[i]; System.arraycopy(arr, 0, carr, 0, i); } return carr; } /** * * 从数组中随机取出一个或多个单元 * 当 arr 为 null 时返回 new Object[0]。 * * @param arr * @return */ public static Object[] random(Object[] arr) { if (arr == null) { return new Object[0]; } int count = new Random().nextInt(arr.length); count = count > 0 ? count : 1; return random(arr, count); } /** * * 将数组打乱 * 当 arr 为 null 时返回 new Object[0]。 * * @param arr * @return */ public static Object[] shuffle(Object[] arr) { if (arr == null) { return new Object[0]; } return random(arr, arr.length); } /** * * 随机取出固定数量的元素 * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle} * 当 arr 为 null 时返回 new Object[0]。 * * @param arr * @param count * @return */ public static Object[] random(Object[] arr, int count) { Object[] rarr = new Object[0]; if (arr != null) { if (arr.length < count) { count = arr.length; } Random random = new Random(); int i = 0; int num = 0; rarr = new Object[count]; int[] keys = new int[count]; for (int j = 0; j < keys.length; j++) { keys[j] = -1; } do { num = random.nextInt(arr.length); if (!inArray(keys, num)) { keys[i] = num; rarr[i] = arr[num]; i++; } } while (i < count); } return rarr; } /** * * 检查数组中是否存在某个值 * * @param arr * @param search * @return */ public static boolean inArray(Object[] arr, Object search) { if (arr != null && search != null) { for (int i = 0; i < arr.length; i++) { if (search.equals(arr[i])) { return true; } } } return false; } /** * * 检查数组中是否存在某几个值 * * @param arr * @param search * @return */ public static boolean inArray(Object[] arr, Object[] search) { if (search != null) { for (int i = 0; i < search.length; i++) { if (!inArray(arr, search[i])) { return false; } } return true; } return false; } /** * * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。 * * @param arr * @param search * @return */ public static int search(Object[] arr, Object search) { if (arr != null && search != null) { for (int i = 0; i < arr.length; i++) { if (search.equals(arr[i])) { return i; } } } return -1; } /** * * 返回一个单元顺序相反的数组 * 当 arr 为 null 时返回 new Object[0]。 * * @param arr * @return */ public static Object[] reverse(Object[] arr) { Object[] rarr = new Object[0]; if (arr != null) { rarr = new Object[arr.length]; int j = 0; for (int i = arr.length - 1; i >= 0; i--) { rarr[j++] = arr[i]; } } return rarr; } /** * String array tools * ===================== */ /** * * 计算数组中的单元数目或对象中的属性个数 * 当 arr 为 null 时返回 0。 * * @param arr * @return */ public static int sizeOf(String[] arr) { return arr == null ? 0 : arr.length; } /** * * 合并一个或多个数组 * 当 arr 为 null 时返回 new String[0]。 * * @param arrs * @return */ public static String[] merge(String[]... arrs) { String[] result = new String[0]; if (arrs != null) { int count = 0; for (int i = 0; i < arrs.length; i++) { count += arrs[i].length; } result = new String[count]; String arg; int k = 0; for (int i = 0; i < arrs.length; i++) { if (arrs[i] == null) { continue; } for (int j = 0; j < arrs[i].length; j++) { arg = arrs[i][j]; result[k] = arg; k++; } } } return result; } /** * * 计算数组的差集 * 注意: * aArr 为null时 返回 bArr(可能为 null)。 * bArr 为null时 返回 aArr。 * 无差集时返回 new String[0]; * * @param aArr * @param bArr * @return */ public static String[] diff(String[] aArr, String[] bArr) { { if (aArr == null) { return bArr; } if (bArr == null) { return aArr; } } String[] cArr = new String[aArr.length + bArr.length]; int idx = 0; /** * 检查 a 中那些元 在 b 中不存在 */ for (int i = 0; i < aArr.length; i++) { if (!inArray(bArr, aArr[i])) { cArr[idx++] = aArr[i]; } } /** * 检查 b 中那些元 在 a 中不存在 */ for (int i = 0; i < bArr.length; i++) { if (!inArray(aArr, bArr[i])) { cArr[idx++] = bArr[i]; } } // String[] dArr = new String[idx]; System.arraycopy(cArr, 0, dArr, 0, dArr.length); return dArr; } /** * * 返回一个数组的全复制 * 当 arr 为 null 时返回 new String[0] 。 * * @param arr * @return */ public static String[] copyOf(String[] arr) { String[] carr = new String[0]; if (arr != null) { carr = new String[arr.length]; System.arraycopy(arr, 0, carr, 0, arr.length); } return carr; } /** * * 返回一个数组的复制 * 当 arr 为 null 时返回 new String[0] 。 * * @param arr * @param i * @return */ public static String[] copyOf(String[] arr, int i) { String[] carr = new String[0]; if (arr != null) { if (i > arr.length) { i = arr.length; } carr = new String[i]; System.arraycopy(arr, 0, carr, 0, i); } return carr; } /** * * 从数组中随机取出一个或多个单元 * 当 arr 为 null 时返回 new String[0] 。 * * @param arr * @return */ public static String[] random(String[] arr) { if (arr == null) { return new String[0]; } int count = new Random().nextInt(arr.length); count = count > 0 ? count : 1; return random(arr, count); } /** * * 将数组打乱 * 当 arr 为 null 时返回 new String[0] 。 * * @param arr * @return */ public static String[] shuffle(String[] arr) { if (arr == null) { return new String[0]; } return random(arr, arr.length); } /** * * 随机取出固定数量的元素 * 如取出数量大于数组元素数则返回打乱的数组,等同于 {@link #shuffle} * 当 arr 为 null 时返回 new String[0] 。 * * @param arr * @param count * @return */ public static String[] random(String[] arr, int count) { String[] rarr = new String[0]; if (arr != null) { if (arr.length < count) { count = arr.length; } Random random = new Random(); int i = 0; int num = 0; rarr = new String[count]; int[] keys = new int[count]; for (int j = 0; j < keys.length; j++) { keys[j] = -1; } do { num = random.nextInt(arr.length); if (!inArray(keys, num)) { keys[i] = num; rarr[i] = arr[num]; i++; } } while (i < count); } return rarr; } /** * * 检查数组中是否存在某个值 * * @param arr * @param search * @return */ public static boolean inArray(String[] arr, String search) { if (arr != null && search != null) { for (int i = 0; i < arr.length; i++) { if (search.equals(arr[i])) { return true; } } } return false; } /** * * 检查数组中是否存在某几个值 * * @param arr * @param search * @return */ public static boolean inArray(String[] arr, String[] search) { if (search != null) { for (int i = 0; i < search.length; i++) { if (!inArray(arr, search[i])) { return false; } } return true; } return false; } /** * * 检查数组中是否存在某个值,并返回其索引键,不存在则返回 -1 。 * * @param arr * @param search * @return */ public static int search(String[] arr, String search) { if (arr != null && search != null) { for (int i = 0; i < arr.length; i++) { if (search.equals(arr[i])) { return i; } } } return -1; } /** * * 返回一个单元顺序相反的数组 * 当 arr 为 null 时返回 new String[0] 。 * * @param arr * @return */ public static String[] reverse(String[] arr) { String[] rarr = new String[0]; if (arr != null) { rarr = new String[arr.length]; int j = 0; for (int i = arr.length - 1; i >= 0; i--) { rarr[j++] = arr[i]; } } return rarr; } /** * 使用间隔符连接 * @param strs * @param sep * @return */ public static String join(String[] strs, String sep) { StringBuilder strBuilder = new StringBuilder(); if (strs != null) { for (int i = 0; i < strs.length; i++) { strBuilder.append(strs[i]); if (i < strs.length - 1) { strBuilder.append(sep); } } } return strBuilder.toString(); } }
相关文章推荐
- 滚动面板 我的java学习之路 ,滚动面板,多线程
- 一. Spring框架防XXS跨站攻击
- JAVA 遛一遛
- 【菜鸟学Java】4:Servlet 技术
- WIN7下java环境的搭建
- Java 开发@ JDBC链接SQLServer2012
- java适配器模式
- SpringMvc之DispatcherServlet详解
- xssProject在java web项目中应用
- java有车有房有能力最基本运用
- ssh 分页struts2+hibernate3+spring 分页
- 从头认识java-11.3 格式化输出(1)
- javaSE(17)(打印流、转换流、对象流、配置文件和递归)
- eclipse手动导入dtd文件
- struts国际化
- spring初始化
- Java并发编程系列之三:重排序与顺序一致性
- 使用eclipse构建Maven项目及发布一个Maven项目
- java设计模式----组合模式
- Spring-Struts2两大框架整合过程介绍(基于注解方式)