zoukankan      html  css  js  c++  java
  • StringUtils 字符串工具类

    package com.thinkgem.jeesite.common.utils;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.util.List;
    import java.util.Locale;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.commons.lang3.StringEscapeUtils;
    import org.springframework.core.io.DefaultResourceLoader;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    import org.springframework.web.servlet.LocaleResolver;
    
    import com.google.common.collect.Lists;
    
    /**
     * 字符串工具类, 继承org.apache.commons.lang3.StringUtils类
     */
    public class StringUtils extends org.apache.commons.lang3.StringUtils {
    	
        private static final char SEPARATOR = '_';
        private static final String CHARSET_NAME = "UTF-8";
        
        /**
         * 转换为字节数组
         * @param str
         * @return
         */
        public static byte[] getBytes(String str){
        	if (str != null){
        		try {
    				return str.getBytes(CHARSET_NAME);
    			} catch (UnsupportedEncodingException e) {
    				return null;
    			}
        	}else{
        		return null;
        	}
        }
        
        /**
         * 转换为字节数组
         * @param str
         * @return
         */
        public static String toString(byte[] bytes){
        	try {
    			return new String(bytes, CHARSET_NAME);
    		} catch (UnsupportedEncodingException e) {
    			return EMPTY;
    		}
        }
        
        /**
         * 是否包含字符串
         * @param str 验证字符串
         * @param strs 字符串组
         * @return 包含返回true
         */
        public static boolean inString(String str, String... strs){
        	if (str != null){
            	for (String s : strs){
            		if (str.equals(trim(s))){
            			return true;
            		}
            	}
        	}
        	return false;
        }
        
    	/**
    	 * 替换掉HTML标签方法
    	 */
    	public static String replaceHtml(String html) {
    		if (isBlank(html)){
    			return "";
    		}
    		String regEx = "<.+?>";
    		Pattern p = Pattern.compile(regEx);
    		Matcher m = p.matcher(html);
    		String s = m.replaceAll("");
    		return s;
    	}
    	
    	/**
    	 * 替换为手机识别的HTML,去掉样式及属性,保留回车。
    	 * @param html
    	 * @return
    	 */
    	public static String replaceMobileHtml(String html){
    		if (html == null){
    			return "";
    		}
    		return html.replaceAll("<([a-z]+?)\s+?.*?>", "<$1>");
    	}
    	
    	/**
    	 * 替换为手机识别的HTML,去掉样式及属性,保留回车。
    	 * @param txt
    	 * @return
    	 */
    	public static String toHtml(String txt){
    		if (txt == null){
    			return "";
    		}
    		return replace(replace(Encodes.escapeHtml(txt), "
    ", "<br/>"), "	", "    ");
    	}
    
    	/**
    	 * 缩略字符串(不区分中英文字符)
    	 * @param str 目标字符串
    	 * @param length 截取长度
    	 * @return
    	 */
    	public static String abbr(String str, int length) {
    		if (str == null) {
    			return "";
    		}
    		try {
    			StringBuilder sb = new StringBuilder();
    			int currentLength = 0;
    			for (char c : replaceHtml(StringEscapeUtils.unescapeHtml4(str)).toCharArray()) {
    				currentLength += String.valueOf(c).getBytes("GBK").length;
    				if (currentLength <= length - 3) {
    					sb.append(c);
    				} else {
    					sb.append("...");
    					break;
    				}
    			}
    			return sb.toString();
    		} catch (UnsupportedEncodingException e) {
    			e.printStackTrace();
    		}
    		return "";
    	}
    	
    	public static String abbr2(String param, int length) {
    		if (param == null) {
    			return "";
    		}
    		StringBuffer result = new StringBuffer();
    		int n = 0;
    		char temp;
    		boolean isCode = false; // 是不是HTML代码
    		boolean isHTML = false; // 是不是HTML特殊字符,如 
    		for (int i = 0; i < param.length(); i++) {
    			temp = param.charAt(i);
    			if (temp == '<') {
    				isCode = true;
    			} else if (temp == '&') {
    				isHTML = true;
    			} else if (temp == '>' && isCode) {
    				n = n - 1;
    				isCode = false;
    			} else if (temp == ';' && isHTML) {
    				isHTML = false;
    			}
    			try {
    				if (!isCode && !isHTML) {
    					n += String.valueOf(temp).getBytes("GBK").length;
    				}
    			} catch (UnsupportedEncodingException e) {
    				e.printStackTrace();
    			}
    
    			if (n <= length - 3) {
    				result.append(temp);
    			} else {
    				result.append("...");
    				break;
    			}
    		}
    		// 取出截取字符串中的HTML标记
    		String temp_result = result.toString().replaceAll("(>)[^<>]*(<?)",
    				"$1$2");
    		// 去掉不需要结素标记的HTML标记
    		temp_result = temp_result
    				.replaceAll(
    						"</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>",
    						"");
    		// 去掉成对的HTML标记
    		temp_result = temp_result.replaceAll("<([a-zA-Z]+)[^<>]*>(.*?)</\1>",
    				"$2");
    		// 用正则表达式取出标记
    		Pattern p = Pattern.compile("<([a-zA-Z]+)[^<>]*>");
    		Matcher m = p.matcher(temp_result);
    		List<String> endHTML = Lists.newArrayList();
    		while (m.find()) {
    			endHTML.add(m.group(1));
    		}
    		// 补全不成对的HTML标记
    		for (int i = endHTML.size() - 1; i >= 0; i--) {
    			result.append("</");
    			result.append(endHTML.get(i));
    			result.append(">");
    		}
    		return result.toString();
    	}
    	
    	/**
    	 * 转换为Double类型
    	 */
    	public static Double toDouble(Object val){
    		if (val == null){
    			return 0D;
    		}
    		try {
    			return Double.valueOf(trim(val.toString()));
    		} catch (Exception e) {
    			return 0D;
    		}
    	}
    
    	/**
    	 * 转换为Float类型
    	 */
    	public static Float toFloat(Object val){
    		return toDouble(val).floatValue();
    	}
    
    	/**
    	 * 转换为Long类型
    	 */
    	public static Long toLong(Object val){
    		return toDouble(val).longValue();
    	}
    
    	/**
    	 * 转换为Integer类型
    	 */
    	public static Integer toInteger(Object val){
    		return toLong(val).intValue();
    	}
    	
    	/**
    	 * 获得i18n字符串
    	 */
    	public static String getMessage(String code, Object[] args) {
    		LocaleResolver localLocaleResolver = (LocaleResolver) SpringContextHolder.getBean(LocaleResolver.class);
    		HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  
    		Locale localLocale = localLocaleResolver.resolveLocale(request);
    		return SpringContextHolder.getApplicationContext().getMessage(code, args, localLocale);
    	}
    	
    	/**
    	 * 获得用户远程地址
    	 */
    	public static String getRemoteAddr(HttpServletRequest request){
    		String remoteAddr = request.getHeader("X-Real-IP");
            if (isNotBlank(remoteAddr)) {
            	remoteAddr = request.getHeader("X-Forwarded-For");
            }else if (isNotBlank(remoteAddr)) {
            	remoteAddr = request.getHeader("Proxy-Client-IP");
            }else if (isNotBlank(remoteAddr)) {
            	remoteAddr = request.getHeader("WL-Proxy-Client-IP");
            }
            return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
    	}
    
    	/**
    	 * 驼峰命名法工具
    	 * @return
    	 * 		toCamelCase("hello_world") == "helloWorld" 
    	 * 		toCapitalizeCamelCase("hello_world") == "HelloWorld"
    	 * 		toUnderScoreCase("helloWorld") = "hello_world"
    	 */
        public static String toCamelCase(String s) {
            if (s == null) {
                return null;
            }
    
            s = s.toLowerCase();
    
            StringBuilder sb = new StringBuilder(s.length());
            boolean upperCase = false;
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
    
                if (c == SEPARATOR) {
                    upperCase = true;
                } else if (upperCase) {
                    sb.append(Character.toUpperCase(c));
                    upperCase = false;
                } else {
                    sb.append(c);
                }
            }
    
            return sb.toString();
        }
    
        /**
    	 * 驼峰命名法工具
    	 * @return
    	 * 		toCamelCase("hello_world") == "helloWorld" 
    	 * 		toCapitalizeCamelCase("hello_world") == "HelloWorld"
    	 * 		toUnderScoreCase("helloWorld") = "hello_world"
    	 */
        public static String toCapitalizeCamelCase(String s) {
            if (s == null) {
                return null;
            }
            s = toCamelCase(s);
            return s.substring(0, 1).toUpperCase() + s.substring(1);
        }
        
        /**
    	 * 驼峰命名法工具
    	 * @return
    	 * 		toCamelCase("hello_world") == "helloWorld" 
    	 * 		toCapitalizeCamelCase("hello_world") == "HelloWorld"
    	 * 		toUnderScoreCase("helloWorld") = "hello_world"
    	 */
        public static String toUnderScoreCase(String s) {
            if (s == null) {
                return null;
            }
    
            StringBuilder sb = new StringBuilder();
            boolean upperCase = false;
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
    
                boolean nextUpperCase = true;
    
                if (i < (s.length() - 1)) {
                    nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
                }
    
                if ((i > 0) && Character.isUpperCase(c)) {
                    if (!upperCase || !nextUpperCase) {
                        sb.append(SEPARATOR);
                    }
                    upperCase = true;
                } else {
                    upperCase = false;
                }
    
                sb.append(Character.toLowerCase(c));
            }
    
            return sb.toString();
        }
        
        /**
         * 获取工程路径
         * @return
         */
        public static String getProjectPath(){
    		String projectPath = "";
    		try {
    			File file = new DefaultResourceLoader().getResource("").getFile();
    			if (file != null){
    				while(true){
    					File f = new File(file.getPath() + File.separator + "src" + File.separator + "main");
    					if (f == null || f.exists()){
    						break;
    					}
    					if (file.getParentFile() != null){
    						file = file.getParentFile();
    					}else{
    						break;
    					}
    				}
    				projectPath = file.toString();
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return projectPath;
        }
        
        /**
         * 如果不为空,则设置值
         * @param target
         * @param source
         */
        public static void setValueIfNotBlank(String target, String source) {
    		if (isNotBlank(source)){
    			target = source;
    		}
    	}
     
        /**
         * 转换为JS获取对象值,生成三目运算返回结果
         * @param objectString 对象串
         *   例如:row.user.id
         *   返回:!row?'':!row.user?'':!row.user.id?'':row.user.id
         */
        public static String jsGetVal(String objectString){
        	StringBuilder result = new StringBuilder();
        	StringBuilder val = new StringBuilder();
        	String[] vals = split(objectString, ".");
        	for (int i=0; i<vals.length; i++){
        		val.append("." + vals[i]);
        		result.append("!"+(val.substring(1))+"?'':");
        	}
        	result.append(val.substring(1));
        	return result.toString();
        }
        
    }
    

      

  • 相关阅读:
    GIT(6)----fork和clone的区别,fetch与pull的区别
    Linux的本地时间和网络时间同步
    ROS知识(19)----写一个简单的pluginlib例子
    JS中关于闭包和this的指向
    hasOwnProperty()与in操作符的区别
    js判断对象的属性是原型的还是实例的
    JavaScript函数的中实参个数和形参个数的获取
    justify-content 定义子元素在父元素水平位置排列的顺序
    flex弹性盒模型
    让子元素在父元素中水平居中align-items
  • 原文地址:https://www.cnblogs.com/a757956132/p/4952371.html
Copyright © 2011-2022 走看看