All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.meteor.module.util.lang.StringExtUtils Maven / Gradle / Ivy

package cn.meteor.module.util.lang;

import java.text.DecimalFormat;

public class StringExtUtils {
	
	/**
	 * 数字之前补零
	 * @param num 数字
	 * @param finalLength 最终字符串长度
	 * @return 补零后的字符串
	 */
	public static String numberFillZeroFront(int num, int finalLength) {
		// String result = String.format("%04d", num); // 0 代表前面补充0 // 4 代表长度为4 // d 代表参数为正数型
		String result = String.format("%" + 0 + finalLength + "d", num);
		return result;
	}

	/**
	 * 流水号按格式增长
	 * @param currentSerialNumber 当前流水号
	 * @param stringFormat 格式,如00000
	 * @param increase 增长长度,如1
	 * @return 增长后的流水号
	 */
	public static String serialNumberIncrease(String currentSerialNumber, String stringFormat, int increase) {
		Integer currentSerialNumberInteger = Integer.parseInt(currentSerialNumber);
		currentSerialNumberInteger = currentSerialNumberInteger + increase;
		DecimalFormat df = new DecimalFormat(stringFormat);
		return df.format(currentSerialNumberInteger);
	}

	public static String translateForSnakeCase(String input) {
        if (input == null) return input; // garbage in, garbage out
        int length = input.length();
        StringBuilder result = new StringBuilder(length * 2);
        int resultLength = 0;
        boolean wasPrevTranslated = false;
        for (int i = 0; i < length; i++)
        {
            char c = input.charAt(i);
            if(c!='_') {
            	if (!wasPrevTranslated && i!=0) {//如果前一个是下划线,当前则转换为大写
            		c = Character.toUpperCase(c);
                    wasPrevTranslated = true;
            	} else {
                	if (Character.isUpperCase(c)) {            		
                		c = Character.toLowerCase(c);
                        wasPrevTranslated = true;
                	}
            	}
            	result.append(c);
                resultLength++;
            } else {
            	wasPrevTranslated = false;
            }
        }
        return resultLength > 0 ? result.toString() : input;
    }
	
	public static String translateForSnakeCase1(String input) {
        if (input == null) return input; // garbage in, garbage out
        int length = input.length();
        StringBuilder result = new StringBuilder(length * 2);
        int resultLength = 0;
        boolean wasPrevTranslated = false;
        for (int i = 0; i < length; i++)
        {
            char c = input.charAt(i);
            if (i > 0 || c != '_') // skip first starting underscore
            {
                if (Character.isUpperCase(c))
                {
                    if (!wasPrevTranslated && resultLength > 0 && result.charAt(resultLength - 1) != '_')
                    {
                        result.append('_');
                        resultLength++;
                    }
                    c = Character.toLowerCase(c);
                    wasPrevTranslated = true;
                }
                else
                {
                    wasPrevTranslated = false;
                }
                result.append(c);
                resultLength++;
            }
        }
        return resultLength > 0 ? result.toString() : input;
    }
	
	/*
	 * 由于Java是基于Unicode编码的,因此,一个汉字的长度为1,而不是2。
	 * 但有时需要以字节单位获得字符串的长度。例如,“123abc长城”按字节长度计算是10,而按Unicode计算长度是8。
	 * 为了获得10,需要从头扫描根据字符的Ascii来获得具体的长度。如果是标准的字符,Ascii的范围是0至255,如果是汉字或其他全角字符,
	 * Ascii会大于255。 因此,可以编写如下的方法来获得以字节为单位的字符串长度。
	 */
	public static int getByteCount(String s) {
		int length = 0;
		for (int i = 0; i < s.length(); i++) {
			int ascii = Character.codePointAt(s, i);
			if (ascii >= 0 && ascii <= 255)
				length++;
			else
				length += 2;

		}
		return length;

	}

	/*
	 * 基本原理是将字符串中所有的非标准字符(双字节字符)替换成两个标准字符(**,或其他的也可以)。
	 * 这样就可以直接例用length方法获得字符串的字节长度了
	 */
	public static int getByteCountByRegex(String s) {
		s = s.replaceAll("[^\\x00-\\xff]", "**");
		int length = s.length();
		return length;
	}
    
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy