`
zpball
  • 浏览: 916314 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java字符处理类

阅读更多

import java.util.ArrayList;
import java.util.Calendar;
import java.util.StringTokenizer;
import java.lang.Integer;

/**
 * 字符串辅助类,处理常用的字符串操作
 * 
 * @author lvx@cic.tsinghua.edu.cn 创建日期: 2009.07.14
 */

public class StringUtil {
	public static String filterNull(String arg){
		if(null != arg && arg.length() > 0){
			return arg;
		}else{
			return "";
		}
	}
	
    /**
     * 将字符串转化为整数
     * @param str String
     * @return int
     */
    public static int parseInt(String str) {
        try {
            return Integer.parseInt(str);
        }
        catch (NumberFormatException e) {
            return 0;
        }
    }
    /**
     * 处理字符串:如果为null,则返回空串
     * @param sIn String
     * @return String
     */
    public static String nvl(String sIn) {
        return (sIn == null) ? "" : sIn;
    }
    /**
     * 如果字符串为null或空串,转换为缺省的字符串
     * @param sIn String
     * @param sDefault String 缺省的字符串
     * @return String
     */
    public static String nvl(String sIn, String sDefault) {
        return (sIn == null) ? sDefault : sIn;
    }
    
    /**
     * 将字符串首字母大写
     * @param src String
     * @return String
     */
    public static String capital(String src) {
        String result = "";
        if (src == null || src.length() == 0) {
            return "";
        }
        else {
            try {
                result = src.substring(0, 1).toUpperCase() + src.substring(1);
            }
            catch (Exception e) {
                result = "";
            }
        }
        return result;
    }
	public static String formatDate(String date){
		//1.判断是否合法
		if(null != date && date.length() != 8){
			return "";
		}
		//2.转换
		StringBuffer d = new StringBuffer();
		d.append(date.substring(0, 4));
		d.append("-");
		d.append(date.substring(4, 6));
		d.append("-");
		d.append(date.substring(6, 8));
		return d.toString();
	}
    /**
     * 缺省的字符串分割符
     */
    public static String DEFAULT_DELIM = "$*";

    /**
     * 私有构造方法,防止类的实例化,因为工具类不需要实例化。
     */
    private StringUtil() {
    }
    
    /**
     * 判断是否为空
     * 
     * @param array 字符串
     * @return boolean
     */
    public static boolean isNull(String s){
    	if(null != s && s.length() > 0){
    		return true;
    	}else{
    		return false;
    	}
    }
    
    
    /**
     * 将字符串数组使用缺省的分隔符合并成一个字符串。
     * 
     * @param array 字符串数组
     * @return 合并后的字符串
     */
    public static String join(String[] array) {
        return join(array, DEFAULT_DELIM);
    }

    /**
     * 将字符串数组使用指定的分隔符合并成一个字符串。
     * 
     * @param array 字符串数组
     * @param delim 分隔符,为null的时候使用缺省分割符(逗号)
     * @return 合并后的字符串
     */
    public static String join(String[] array, String delim) {
        int length = array.length - 1;
        if (delim == null) {
            delim = DEFAULT_DELIM;
        }
        StringBuffer result = new StringBuffer(length * 8);
        for (int i = 0; i < length; i++) {
            result.append(array[i]);
            result.append(delim);
        }
        result.append(array[length]);
        return result.toString();
    }

    /**
     * 将字符串使用缺省分割符(逗号)划分的单词数组。
     * 
     * @param source 需要进行划分的原字符串
     * @return 划分以后的数组,如果source为null的时候返回以source为唯一元素的数组。
     */
    public static String[] split(String source) {
        return split(source, DEFAULT_DELIM);
    }

    /**
     * 此方法将给出的字符串source使用delim划分为单词数组。 注意:分隔字符串中每一个 <b>(ANY) </b>的字符都作为独立的分割符。 <br>
     * 举个例子: <br>
     * "mofit.com.cn"用"com"分割后的结果是三个字符串"fit."、"."和"n",而不是"mofit."和".cn"。
     * 
     * @param source 需要进行划分的原字符串
     * @param delim 单词的分隔字符串
     * @return 划分以后的数组,如果source为null的时候返回以source为唯一元素的数组, 如果delim为null则使用逗号作为分隔字符串。
     */
    public static String[] split(String source, String delim) {
        String[] wordLists;
        if (source == null) {
            wordLists = new String[1];
            wordLists[0] = source;
            return wordLists;
        }
        if (delim == null) {
            delim = DEFAULT_DELIM;
        }
        StringTokenizer st = new StringTokenizer(source, delim);

        int total = st.countTokens();
        wordLists = new String[total];
        for (int i = 0; i < total; i++) {
            wordLists[i] = st.nextToken();
        }
        return wordLists;
    }

    /**
     * 字符串数组中是否包含指定的字符串。 注意:准确的说应该是匹配,而不是包含。 <br>
     * 举个例子:字符串数组"mofit.com.cn","neusoft.com"里 <b>不包含 </b>"com", <br>
     * 但是 <b>包含 </b>"mofti.com.cn"。
     * 
     * @param strings 字符串数组
     * @param string 字符串
     * @param caseSensitive 是否大小写敏感
     * @return 包含时返回true,否则返回false
     */
    public static boolean contains(String[] strings, String string, boolean caseSensitive) {
        for (int i = 0; i < strings.length; i++) {
            if (caseSensitive == true) {
                if (strings[i].equals(string)) {
                    return true;
                }
            } else {
                if (strings[i].equalsIgnoreCase(string)) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * 字符串数组中是否包含指定的字符串。大小写敏感。 <br>
     * 注意:准确的说应该是匹配,而不是包含。 <br>
     * 举个例子:字符串数组"mofit.com.cn","neusoft.com"里 <b>不包含 </b>"com", <br>
     * 但是 <b>包含 </b>"mofti.com.cn"。
     * 
     * @param strings 字符串数组
     * @param string 字符串
     * @return 包含时返回true,否则返回false
     */
    public static boolean contains(String[] strings, String string) {
        return contains(strings, string, true);
    }

    /**
     * 去除左边多余的空格。
     * 
     * @param value 待去左边空格的字符串
     * @return 去掉左边空格后的字符串
     */
    public static String trimLeft(String value) {
        String result = value;
        if (result == null) {
            return result;
        }
        char ch[] = result.toCharArray();
        int index = -1;
        for (int i = 0; i < ch.length; i++) {
            if (Character.isWhitespace(ch[i])) {
                index = i;
            } else {
                break;
            }
        }
        if (index != -1) {
            result = result.substring(index + 1);
        }
        return result;
    }

    /**
     * 去除右边多余的空格。
     * 
     * @param value 待去右边空格的字符串
     * @return 去掉右边空格后的字符串
     */
    public static String trimRight(String value) {
        String result = value;
        if (result == null) {
            return result;
        }
        char ch[] = result.toCharArray();
        int endIndex = -1;
        for (int i = ch.length - 1; i > -1; i--) {
            if (Character.isWhitespace(ch[i])) {
                endIndex = i;
            } else {
                break;
            }
        }
        if (endIndex != -1) {
            result = result.substring(0, endIndex);
        }
        return result;
    }

    /**
     * 得到字符串的字节长度。汉字占两个字节,字母占一个字节
     * 
     * @param source 字符串
     * @return 字符串的字节长度
     */
    public static int getLength(String source) {
        int len = 0;
        for (int i = 0; i < source.length(); i++) {
            char c = source.charAt(i);
            int highByte = c >>> 8;
            len += highByte == 0 ? 1 : 2;
        }
        return len;
    }

    /**
     * 使用给定的字串替换源字符串中指定的字串。
     * 
     * @param mainString 源字符串
     * @param oldString 被替换的字串
     * @param newString 替换字串
     * @return 替换后的字符串
     */
    public final static String replace(String mainString, String oldString, String newString) {
        if (mainString == null) {
            return null;
        }
        int i = mainString.lastIndexOf(oldString);
        if (i < 0) {
            return mainString;
        }
        StringBuffer mainSb = new StringBuffer(mainString);
        while (i >= 0) {
            mainSb.replace(i, i + oldString.length(), newString);
            i = mainString.lastIndexOf(oldString, i - 1);
        }
        return mainSb.toString();
    }

    /**
     * 将给定的字符串转换为中文GBK编码的字符串。
     * 
     * @param str 输入字符串
     * @return 经GBK编码后的字符串,如果有异常,则返回原编码字符串
     */
    public final static String toChinese(final String str) {
        if (null == str || "".equals(str)) {
            return str;
        }
        String retVal = str;
        try {
            retVal = new String(str.getBytes("ISO8859_1"), "GBK");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
        return retVal;
    }

    /**
     * 将给定的中文GBK编码转换为UNICODE编码的字符串。
     * 
     * @param str 输入字符串
     * @return 经GBK编码后的字符串,如果有异常,则返回原编码字符串
     */
    public final static String toUNICODE(final String str) {
        if (null == str || "".equals(str)) {
            return str;
        }
        String retVal = str;
        try {
            retVal = new String(str.getBytes("ZHS16GBK"), "GBK");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
        return retVal;
    }

    /**
     * 用于字符串显示。将html敏感的尖括号、引号、连接号等用转义符替代。 <br>
     * 建议用法:在接收到客户端传来的字符串时,不进行转换,直接存入数据库; <br>
     * 在从数据库中取出,传给客户端做html显示时,才转换。
     * 
     * @param input 需要检查的字符串
     * @return 转化后的字串
     */
    public final static String convertToHTML(String input) {
        if (null == input || "".equals(input)) {
            return input;
        }

        StringBuffer buf = new StringBuffer();
        char ch = ' ';
        for (int i = 0; i < input.length(); i++) {
            ch = input.charAt(i);
            if (ch == '<') {
                buf.append("&lt;");
            } else if (ch == '>') {
                buf.append("&gt;");
            } else if (ch == '&') {
                buf.append("&amp;");
            } else if (ch == '"') {
                buf.append("&quot;");
            } else if (ch == '\n') {
                buf.append("<BR/>");
            } else {
                buf.append(ch);
            }
        }
        return buf.toString();
    }

    /**
     * 定义字符串加密时需要用到的标记字符串
     */
    private static String ENCRYPT_IN = "YN8K1JOZVURB3MDETS5GPL27AXW`IHQ94C6F0~qwert!@yuiop#$asdfghj%kl^&*zxc vbn(m)_+|{}:\"<>?-=\\[];,./'";

    /**
     * 定义字符串加密时需要用到的转义字符串
     */
    private static String ENCRYPT_OUT = "qazwsxcderfvbgtyhnmjuiklop~!@#$%^&*()_+|{ }:\"<>?-=\\[];,./'ABCDE`FGHIJKLMNOPQRSTUVWXYZ0123456789";

    /**
     * 对给定字符串进行加密操作
     * 
     * @param inPass 待加密的字符串
     * @return 加密后的字符串
     */
    public static String encrypt(String inPass) {
        String stringIn = ENCRYPT_IN;
        String stringOut = ENCRYPT_OUT;
        int time1 = Calendar.getInstance().get(Calendar.MINUTE);
        int time2 = Calendar.getInstance().get(Calendar.SECOND);
        int offset = (time1 + time2) % 95;
        String outPass = stringIn.substring(offset, offset + 1);
        stringIn = stringIn + stringIn;
        stringIn = stringIn.substring(offset, offset + 95);
        String temp = "";
        for (int i = 0; i <= inPass.length() - 1; i++) {
            temp = temp + stringOut.charAt(stringIn.indexOf(inPass.charAt(i)));

        }
        outPass = outPass + temp;
        return outPass;
    }

    /**
     * 对给定字符串进行解密操作
     * 
     * @param outPass 待解密的字符串
     * @return 解密还原后的字符串
     */
    public static String decrypt(String outPass) {
        String stringIn = ENCRYPT_IN;
        String stringOut = ENCRYPT_OUT;
        int offset = stringIn.indexOf(outPass.charAt(0));
        stringIn = stringIn + stringIn;
        stringIn = stringIn.substring(offset, offset + 95);
        outPass = outPass.substring(1);
        String inPass = "";
        for (int i = 0; i <= outPass.length() - 1; i++) {
            inPass = inPass + stringIn.charAt(stringOut.indexOf(outPass.charAt(i)));

        }
        return inPass;
    }

    //指定的字符串累加
    public static String strAdd(String chr, int len) {
        if (len > 0) {
            StringBuffer ret = new StringBuffer(len);
            for (int i = 0; i < len; i++) {
                ret.append(chr);
            }
            return (ret.toString());
        } else {
            return "";
        }
    }

    //给字符串补足到指定的长度,从左边补足chr指定的字符
    public static String lPad(String source, String chr, int len) {
        int lenleft = len - source.length();
        if (lenleft < 0) {
            lenleft = 0;
        }
        return (strAdd(chr, lenleft) + source);
    }

    //给字符串补足到指定的长度,从右边补足chr指定的字符
    public static String rPad(String source, String chr, int len) {
        int lenleft = len - source.length();
        if (lenleft < 0) {
            lenleft = 0;
        }
        return (source + strAdd(chr, lenleft));
    }

    public static void main(String[] args) {

        String[] test = { "北京 mofit. com. cn", " neusoft.com ", "<out\"OfTax>" };
        String all = join(test, "||");

        System.out.println("字符串[" + test[0] + "],[" + test[1] + "],[" + test[2] + "]合并结果:" + all);
       System.out.println("字符串[" + test[0] + "],[" + test[1] + "],[" + test[2] + "]是否包含[<out\"oftax>](区分大小写):" + contains(test, "<out\"oftax>"));
       System.out.println("字符串[" + test[0] + "],[" + test[1] + "],[" + test[2]+ "]是否包含[<out\"oftax>](不区分大小写):" + contains(test, "<out\"oftax>", false));
       System.out.println("字符串[" + all + "]转换为html:" + convertToHTML(all));

        String en = encrypt(test[2]);

        System.out.println("字符串[" + test[2] + "]加密后为:" + en);
        System.out.println("字符串[" + en + "]解密后为:" + decrypt(en));
        System.out.println("字符串[" + test[0] + "]的长度为:" + getLength(test[0]));
        System.out.println("字符串[" + all + "]用[Company]替换[.com]后为:["
                       + replace(all, ".com", "Company") + "]");

        String[] sp = split(test[0], "com");
        System.out.println("字符串[" + test[0] + "]用[com]分隔为" + sp.length + "个字符串。分别为:[" + sp[0] + "],[" + sp[1] + "],[" + sp[2] + "]...");

        System.out.println("字符串[" + test[1] + "]去掉左空格为:[" + trimLeft(test[1]) + "]");
        System.out.println("字符串[" + test[1] + "]去掉右空格为:[" + trimRight(test[1]) + "]");
        System.out.println("字符串[" + test[1] + "]去掉空格为:[" + removeBlank(test[1]) + "]");
    }
    /**
     * 取小数点后1位
     * @param f float
     * @return float
     */
    public static float roundFloat(float f) {
      
        float result = (float)((int)((f + 0.0005) * 1000)/10.0);
        return result;
    }
    /**
     * 取小数点后一位
     */
    public static String round(float f){
        String temp =  (f + 0.05) + "";
        if(null != temp && temp.length() > 0){
            temp =  temp.substring(0,temp.lastIndexOf(".") + 2);
        }
        return temp;
    }
    
    /** 
    * 去掉字符串中的空格 
    * @param str 
    * @return String 
    */ 
    public static String removeBlank(String str){ 
    	StringBuilder sb = new StringBuilder(); 
    	char c = ' '; 
    	for(int i = 0 ; i < str.length() ; i++){ 
    		char ch = str.charAt(i); 
    			if(ch != c){ 
    				sb.append(ch); 
    			} 
    	} 
    	return sb.toString(); 
    } 
}
分享到:
评论

相关推荐

    java字符串基本处理工具类

    java字符串处理的util工具类,也可以同时添加一些其他字符处理的方法,对于项目中特殊字符处理,完成项目中基本的字串符处理。

    JAVA字符串操作类CTool.java字符转换类.rar

    JAVA字符串操作类CTool.java字符转换类,此类中收集Java编程中WEB开发常用到的一些工具。为避免生成此类的实例,构造方法被申明为private类型的。封装的功能:字符串从GBK编码转换为Unicode编码、对字符串进行md5...

    JAVA中处理字符串的类

    除了这些基本的字符串处理类,Java还包含`Pattern`和`Matcher`类来处理正则表达式。`Pattern`类用于编译正则表达式模式,而`Matcher`类用于在给定输入字符串中查找匹配的模式。这两个类可以执行复杂的文本分析和模式...

    java 字符串处理

    java 常用字符串处理工具类! java 常用字符串处理工具类!

    java自定义工具类,对字符串进行特殊处理

    1.删除字符 2.去空格 3.去除所有空格和特殊字符 4.判断邮箱 5.字符串集合转字符串 6.只保留汉字 7.关键词前后是否包含英文字母 8.去除字符串中的附件 9.获取下标单个位置和所有位置

    java字符串处理取出括号内的字符串

    首先,我们要明白Java中的字符串是`String`类的对象,它提供了丰富的API用于字符串的处理。例如,我们可以使用`substring()`方法来截取字符串的一部分,但这并不适用于提取括号内的内容,因为我们需要识别开括号和闭...

    java 创建字符串类

    Java提供了两种主要的方式来创建字符串:通过`String`类的构造方法和使用`StringBuilder`或`StringBuffer`类。以下是对这些知识点的详细解释: 1. **String类**: - **不可变性**:Java中的`String`对象是不可变的...

    java字符串中${}或者{}等的占位符替换工具类

    Java字符串中${}或者{}等占位符替换工具类 Java字符串中${}或者{}等占位符替换工具类是一个功能强大且实用的工具类,它可以将Java字符串中的占位符依次替换为指定的值。该工具类的主要功能是实现占位符的替换,即将...

    java字符串处理输入一个字符串和一个字符后,原字符串中所有该字符将被删除并显示出结果

    在Java编程语言中,字符串处理是一项基础且重要的任务。在这个特定的场景中,我们需要创建一个Applet程序,它能够接收用户输入的字符串和一个字符,然后从原始字符串中删除所有出现的指定字符,并显示处理后的结果。...

    Java中的字符串相关处理

    ### Java中的字符串相关处理 #### 引言 在Java编程语言中,字符串处理是一个核心且广泛使用的领域。不同于其他编程语言将字符串视为字符数组,Java将字符串视为`String`类型对象,这一设计使得字符串处理更加高效...

    java字符串练习

    本文将围绕“java字符串练习”这一主题,深入探讨如何解析字符串、逆序输出字符串以及处理特定格式的字符串数据。 首先,我们要讨论的是字符串解析。在Java中,我们可以使用`String`类提供的方法或正则表达式来实现...

    java 字符串 正则表达式 详细实例代码

    通过运行和调试这些代码,你可以加深对Java字符串、正则表达式以及日期时间格式化的理解。 总之,理解和熟练掌握Java中的字符串操作、正则表达式以及日期时间格式化对于任何Java开发者来说都是必不可少的技能。通过...

    java 字符串操作类

    `StringUtil` 类是基于Java标准库的 `String` 类进行扩展的,它提供了更丰富的接口,使得开发者在处理字符串时更加便捷。这个类可能还包含了其他高级功能,如去除特殊字符、格式化输出、URL编码解码等,这些都极大地...

    Java中文字符处理.docx

    ### Java中文字符处理知识点 #### 一、判断字符串是否全为汉字 为了判断一个字符串是否完全由汉字组成,可以通过正则表达式实现。具体做法是使用Unicode编码范围内的汉字字符来构建一个匹配模式。 **代码示例:**...

    java处理字符和字符串课件

    ### Java处理字符和字符串知识点详解 #### 一、概述 在Java编程中,字符和字符串是最常见的数据类型之一。为了方便高效地处理这些数据类型,Java提供了强大的支持,包括`Character`类和`String`类等。这些类位于`...

    java中的字符串处理

    Java中的字符串处理是编程的基础之一,理解`String`和`StringBuffer`的区别以及如何使用这些类对于开发高质量的Java应用程序至关重要。掌握字符串的构造方法和操作技巧可以帮助开发者编写出更加高效、易于维护的代码...

    JAVA字符流加密实验代码报告

    Java字符流主要用于处理基于Unicode编码的字符数据,它分为输入流(Reader)和输出流(Writer),用于读取和写入字符数据。 实验的核心知识点主要包括: 1. **Java流的层次结构**:Java流被组织成一个层次结构,...

    Java字符流与字节流区别

    Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理...

    Java字符串查找和提取异常处理

    ### Java字符串查找和提取异常处理 #### 概述 本文将详细介绍如何在Java中实现字符串查找与提取功能,并在此过程中妥善处理可能出现的各种异常情况。通过分析提供的代码示例`IndexOfAndCharAt.java`,我们将了解到...

    java 字符串中文判断

    总的来说,通过理解Unicode编码和Java的字符处理机制,我们可以有效地处理中文字符。在实际项目中,这样的工具类对于处理中文字符的检测和统计是非常有用的,能够提高代码的可读性和复用性。在Java中处理字符串,...

Global site tag (gtag.js) - Google Analytics