UtilsString.java 7.12 KB
package com.taover.repository.util;

import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;

public class UtilsString {
	/**
	 * 格式化日期区间字符串
	 * @param source
	 * @param splitStr
	 * @param dateFormat
	 * @return
	 * @throws Exception
	 */
	public static Date[] getDateFromString(String source, String splitStr, String dateFormat) throws Exception{
		Date[] resultObj = new Date[2];
		Date createdAtStart = null;
		Date createdAtEnd = null;
		if(source != null && !"".equals(source)){
			String[] createdAtArr = source.split(splitStr);
			SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
			if(createdAtArr.length > 0){
				createdAtStart = sdf.parse(createdAtArr[0]);
			}
			if(createdAtArr.length > 1){
				createdAtEnd = sdf.parse(createdAtArr[1]);
			}
		}
		resultObj[0] = createdAtStart;
		resultObj[1] = createdAtEnd;
		return resultObj;
	}
	
	/**
	 * 获取URL path部分
	 * @param url
	 * @return
	 */
	public static String getUrlPath(String url){
		if(url == null){
			return null;
		}
		if(url.startsWith("http")){
			try{
				URL dataUrl = new URL(url);
				return dataUrl.getPath();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return url;
	}
	
	/**
	 * 在compares字符数组查找pattern字符串,找到则返回字串在数组中的索引,未找到返回-1
	 * @param pattern
	 * @param compares
	 * @return
	 */
	public static int getStringIndex(String pattern, String compares[]){
		//参数检验
		if(pattern==null || compares==null){
			return -1;
		}
		
		//循环遍历compares
		for(int i=0; i<compares.length; ++i){
			if(compares[i].equals(pattern)){
				return i;
			}
		}
		return -1;
	}
	
	/**
	 * 生成发货单的发货单内部序号, 格式:'D'.date('Ymd') +8位数字
	 * @return
	 */
	public static String getDeliverySn(){
		String result = "D";
		String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
		long temp = System.currentTimeMillis()%100000000;
		result = result + date + temp;
		return result;
	}
	
	/**
	 * 通过表名获取BEAN类名
	 * @param tableName
	 * @return
	 */
	public static String getBeanNameFormTableName(String tableName){
		if (tableName == null) return null;
        if (tableName.length() == 0) return "";
        byte[] ss = tableName.toLowerCase().getBytes();
        int len = ss.length;
        byte[] ss1 = new byte[len];
        ss1[0] = new String(ss, 0).toUpperCase().getBytes()[0];
        int k = 1;
        for (int i = 1; i < ss.length; i++) {
            if (ss[i] == '_') {
                if (i < ss.length - 1) {
                    ss1[k] = (byte)Character.toUpperCase(ss[(i + 1)]);
                    i++;
                }
                len--;
            } else {
                ss1[k] = ss[i];
            }
            k++;
        }
        return new String(ss1, 0, len);
	}
	
	/**
	 * 获取前缀
	 * @param value
	 * @param digitNumber
	 * @param preffixChar
	 * @return
	 */
	public static String getCodeWithPreffix(long value, int digitNumber, char preffixChar){
		String result = "";
		if(value>Long.MAX_VALUE || value<Long.MIN_VALUE){
			return null;
		}
		for(int i=digitNumber; i>0; --i){
			long baseDiv = (long) Math.pow(10, i-1);
			long baseRand = (long) Math.pow(10, i);
			long currentDigit = value % baseRand / baseDiv;
			if(currentDigit == 0){
				result = result + preffixChar;
			}else{
				result = result + currentDigit;
			}
		}
		return result;
	}
	
	/**
	 * 将驼峰式命名的字符串转换为下划线大写方式。如果转换前的驼峰式命名的字符串为空,则返回空字符串。</br>
	 * 例如:HelloWorld->HELLO_WORLD
	 * @param name 转换前的驼峰式命名的字符串
	 * @return 转换后下划线大写方式命名的字符串
	 */
	public static String underscoreName(String name) {
	    StringBuilder result = new StringBuilder();
	    if (name != null && name.length() > 0) {
	        // 将第一个字符处理成大写
	        result.append(name.substring(0, 1).toUpperCase());
	        // 循环处理其余字符
	        for (int i = 1; i < name.length(); i++) {
	            String s = name.substring(i, i + 1);
	            // 在大写字母前添加下划线
	            if (Character.isUpperCase(s.charAt(0)) && Character.isLetter(s.charAt(0))) {
	                result.append("_");
	            }
	            // 其他字符直接转成大写
	            result.append(s.toUpperCase());
	        }
	    }
	    return result.toString();
	}
	 
	/**
	 * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。</br>
	 * 例如:HELLO_WORLD->HelloWorld
	 * @param name 转换前的下划线大写方式命名的字符串
	 * @return 转换后的驼峰式命名的字符串
	 */
	public static String camelName(String name) {
	    StringBuilder result = new StringBuilder();
	    // 快速检查
	    if (name == null || name.isEmpty()) {
	        // 没必要转换
	        return "";
	    } else if (!name.contains("_")) {
	        // 不含下划线,仅将首字母小写
	        return name.substring(0, 1).toLowerCase() + name.substring(1);
	    }
	    // 用下划线将原始字符串分割
	    String camels[] = name.split("_");
	    for (String camel :  camels) {
	        // 跳过原始字符串中开头、结尾的下换线或双重下划线
	        if (camel.isEmpty()) {
	            continue;
	        }
	        // 处理真正的驼峰片段
	        if (result.length() == 0) {
	            // 第一个驼峰片段,全部字母都小写
	            result.append(camel.toLowerCase());
	        } else {
	            // 其他的驼峰片段,首字母大写
	            result.append(camel.substring(0, 1).toUpperCase());
	            result.append(camel.substring(1).toLowerCase());
	        }
	    }
	    return result.toString();
	}

	public static String getRandomStr(int digitNum){
		int numStartZero = 48;		
		int charStartUpperA = 65;		
		int charStartLowerA = 97;
		int numSelectCount = 10;
		int charSelectCount = 26;		
		int numCount = numSelectCount+2*charSelectCount;
		String randomResult = "";
		for(int i=0; i<digitNum; ++i){
			int currIndex = (int)(Math.random()*numCount);
			if(currIndex < numSelectCount){
				currIndex = numStartZero+currIndex;
			}else if(currIndex < numSelectCount+charSelectCount){
				currIndex = charStartUpperA+(currIndex-numSelectCount);
			}else{
				currIndex = charStartLowerA+(currIndex-numSelectCount-charSelectCount);
			}
			randomResult += (char)(currIndex)+"";
		}
		return randomResult;
	}
	
	public static void main(String args[]){
//		System.out.println(getBeanNameFormTableName("asdf_asdf"));
//		System.out.println(System.currentTimeMillis());
//		System.out.println(getCodeWithPreffix(1231212, 10, '-'));
		/*String dd = "\"{\"success\":true,\"code\":1,\"printedorder_id\":\"1654\",\"error_message\":\"\"}\"";
		dd = dd.substring(1, dd.length()-1);
		System.out.println(dd);
		JSONObject temp = JSONObject.fromObject(dd);
		System.out.println(temp.getInt("code"));*/
		
		//System.out.println(UtilsString.getUrlPath("https://ss0.umsapi.com/files/de/c1/13/dec11397254b06e1fd8750311ec2bb02ccd8d3dc.jpeg"));
		System.out.println(getRandomStr(12));
	}
}