Java之String常用的公共方法UtilForString

本文介绍了一个实用的Java字符串工具类,提供了多种操作字符串的方法,包括加密解密、子串提取、编码转换等功能,并详细解释了各个方法的实现原理及使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class UtilForString
{
   /**
    * 用base64算法加密字符串
    * 
    * @param content 输入字符串
    * @return 返回加密后的字符串
    */
   public static String encodeBase64(String content)
   {
      return com.sun.org.apache.xerces.internal.impl.dv.util.Base64.encode(content.getBytes());
   }

   /**
    * 用base64算法解密字符串
    * 
    * @param content
    * @return
    */
   public static String decodeBase64(String content)
   {
      try
      {
         return new String(com.sun.org.apache.xerces.internal.impl.dv.util.Base64.decode(content),
               "GBK");
      }
      catch(java.io.UnsupportedEncodingException e)
      {
         e.printStackTrace();
         return null;
      }
   }

   /**
    * 去子字符串,下标溢出也不会出错
    * 
    * @param src
    * @param begin
    * @return
    */
   public static String substring(String src, int begin)
   {
      return substring(src, begin, src.length());
   }

   /**
    * 取子字符串,下标溢出也不会出错
    * 
    * @param src 输入字符串
    * @param begin 开始位置
    * @param end 结束位置
    * @return
    */
   public static String substring(String src, int begin, int end)
   {
      if(isBlank(src) || src.length() < begin || begin > end)
         return "";
      if(end > src.length())
         return src.substring(begin);
      else
         return src.substring(begin, end);
   }

   /**
    * 转换字符串编码.
    * 
    * @param s the s
    * @param oldCharset the old charset
    * @param charset the new charset
    * @return the string
    */
   public static String transStr(String s, String oldCharset, String charset)
   {
      try
      {
         return new String(s.getBytes(oldCharset), charset);
      }
      catch(java.io.UnsupportedEncodingException e)
      {
         return s;
      }
   }

   /**
    * 返回字符串中某个字符串出现的次数
    * 
    * @param source 源字符串
    * @param str 匹配的字符串
    * @return 出现的次数
    */
   public static int matchTimes(String source, String str)
   {
      int result = 0;

      if(isBlank(source))
         return result;

      else
      {
         int fromIndex = 0;

         int index = 0;
         
         while((index = source.indexOf(str, fromIndex)) >= 0)
         {
            result++;
            fromIndex = index + 1;
         }
         
         return result;
      }
   }

   /**
    * 在长字符串指定的长度间隔处增加子字符串.
    * 
    * @param value
    * @param length
    * @param str
    * @return
    */
   public static String getConvertStr(String value, int length, String str)
   {
      StringBuilder sb = new StringBuilder();
      
      if(value.length() <= length)
         return value;
     
      for(int i = 0, n = value.length(); i < n; i = i + length)
      {
         if(i + length >= n)
            sb.append(value.substring(i));
         else
            sb.append(value.substring(i, i + length)).append(str);
      }
      
      return sb.toString();
   }

   /**
    * 人民币转成大写
    * 
    * @param value
    * @return String
    */
   public static String hangeToBig(double value)
   {
      char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示
      char[] vunit = { '万', '亿' }; // 段名表示
      char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示
      long midVal = (long)(value * 100); // 转化成整形
      
      String valStr = String.valueOf(midVal); // 转化成字符串
      String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
      String rail = valStr.substring(valStr.length() - 2); // 取小数部分
      String prefix = ""; // 整数部分转化的结果
      String suffix = ""; // 小数部分转化的结果
      
      // 处理小数点后面的数
      if(rail.equals("00"))// 如果小数部分为0
      { 
         suffix = "整";
      }
      else
      {
         suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
      }
      // 处理小数点前面的数
      char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
      char zero = '0'; // 标志'0'表示出现过0
      byte zeroSerNum = 0; // 连续出现0的次数
      
      for(int i = 0; i < chDig.length; i++)// 循环处理每个数字
      { 
         int idx = (chDig.length - i - 1) % 4; // 取段内位置
         int vidx = (chDig.length - i - 1) / 4; // 取段位置
         
         if(chDig[i] == '0')// 如果当前字符是0
         { 
            zeroSerNum++; // 连续0次数递增
            if(zero == '0')// 标志
            { 
               zero = digit[0];
            }
            else if(idx == 0 && vidx > 0 && zeroSerNum < 4)
            {
               prefix += vunit[vidx - 1];
               zero = '0';
            }
            continue;
         }
         zeroSerNum = 0; // 连续0次数清零
         if(zero != '0')// 如果标志不为0,则加上,例如万,亿什么的
         { 
            prefix += zero;
            zero = '0';
         }
         prefix += digit[chDig[i] - '0']; // 转化该数字表示
         if(idx > 0)
            prefix += hunit[idx - 1];
         if(idx == 0 && vidx > 0)
         {
            prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
         }
      }
      if(prefix.length() > 0)
         prefix += '圆'; // 如果整数部分存在,则有圆的字样
      
      return prefix + suffix; // 返回正确表示
   }

   /**
    * 全角字符转半角字符
    * 
    * @param QJStr
    * @return String
    */
   public static final String QJToBJChange(String QJStr)
   {
      char[] chr = QJStr.toCharArray();
      String str = "";
      
      for(int i = 0; i < chr.length; i++)
      {
         chr[i] = (char)((int)chr[i] - 65248);
         str += chr[i];
      }
      
      return str;
   }

   /**
    * 字符串转整型,不抛出异常
    * 
    * @param s
    * @return
    */
   public static Integer parseInt(String s)
   {
      Integer i = -1;
      if(!UtilForString.isBlank(s))
      {
         try
         {
            i = Integer.valueOf(s);
         }
         catch(Exception e)
         {
            e.printStackTrace();
         }
      }
      return i;
   }

   /**
    * 从字符串得到整型数组
    * 
    * @param str 输入的字符串
    * @param regx 分割字符串的表达式
    * @return 整型数组,如果为空则返回长度为0的数组,不返回null
    */
   public static int[] parseIntArray(String str, String regx)
   {
      if(UtilForString.isBlank(str))
         return new int[0];

      String[] days = str.split(regx);
      int[] ret = new int[days.length];
      int i = 0;

      for(String intString : days)
      {
         try
         {
            ret[i] = Integer.parseInt(intString);
         }
         catch(Exception e)
         {
            ret[i] = 0;
         }
         i++;
      }
      return ret;
   }

   /**
    * 分割字符串
    * 
    * @param str String 原始字符串
    * @param splitsign String 分隔符
    * @return String[] 分割后的字符串数组
    */
   public static String[] split(String str, String splitsign)
   {
      int index;

      if(str == null || splitsign == null)
         return null;

      java.util.ArrayList<String> al = new java.util.ArrayList<String>();

      while((index = str.indexOf(splitsign)) != -1)
      {
         al.add(str.substring(0, index));
         str = str.substring(index + splitsign.length());
      }
      al.add(str);

      return (String[])al.toArray(new String[0]);
   }

   /**
    * 替换字符串
    * 
    * @param source String 母字符串
    * @param from String 原始字符串
    * @param to String 目标字符串
    * @return String 替换后的字符串
    */
   public static String replace(String source, String from, String to)
   {
      if(source == null || from == null || to == null)
         return null;

      StringBuffer bf = new StringBuffer("");
      int index = -1;

      while((index = source.indexOf(from)) != -1)
      {
         bf.append(source.substring(0, index) + to);
         source = source.substring(index + from.length());
         index = source.indexOf(from);
      }
      bf.append(source);

      return bf.toString();
   }

   /**
    * 替换字符串,能能够在HTML页面上直接显示(替换双引号和小于号)
    * 
    * @param str String 原始字符串
    * @return String 替换后的字符串
    */
   public static String encodeHtml(String str)
   {
      if(str == null) { return null; }
      return replace(replace(str, "<", "<"), "\"", """);
   }

   /**
    * 替换字符串,将被编码的转换成原始码(替换成双引号和小于号)
    * 
    * @param str String
    * @return String
    */
   public static String htmldecode(String str)
   {
      if(str == null) { return null; }
      return replace(""", "\"", replace("<", "<", str));
   }

   /**
    * 是否为空白,包括null和"","  "
    * 
    * @param str
    * @return
    */
   public static boolean isBlank(String str)
   {
      return str == null || str.trim().length() == 0;
   }

   /**
    * 判断两个字符串的值是否相等
    * 
    * @param s1 字符串1
    * @param s2 字符串2
    * @return 相等则返回true
    */
   public static boolean isEqual(String s1, String s2)
   {
      if(s1 == null && s2 == null)
         return true;
      else if(s1 != null)
         return s1.equals(s2);
      
      return false;
   }

   /**
    * 判断是否为整数
    * 
    * @param str 传入的字符串
    * @return 是整数返回true,否则返回false
    */
   public static boolean isInteger(String str)
   {
      java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("^[-\\+]?[\\d]*$");
      return pattern.matcher(str).matches();
   }

   /**
    * 判断是否为浮点数,包括double和float
    * 
    * @param str 传入的字符串
    * @return 是浮点数返回true,否则返回false
    */
   public static boolean isDouble(String str)
   {
      java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("^[-\\+]?[.\\d]*$");
      return pattern.matcher(str).matches();
   }

   /**
    * 判断是否为数字
    * 
    * @param value
    * @return
    */
   public static boolean isNumber(String value)
   {
      try
      {
         Double.valueOf(value);
         return true;
      }
      catch(Exception e)
      {
         return false;
      }
   }

   /**
    * 判断字符串是否为纯数字类型
    * 
    * @param str 源字符串
    * @return
    */
   public static boolean isNumString(String str)
   {
      boolean result = false;
      String regex = "^[0123456789]+$";
      
      if(str.matches(regex))
         result = true;// 是数值
      
      return result;
   }

   /**
    * 判断输入的字符串是否为纯汉字
    * 
    * @param str 传入的字符窜
    * @return 如果是纯汉字返回true,否则返回false
    */
   public static boolean isChinese(String str)
   {
      java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("[\u0391-\uFFE5]+$");
      return pattern.matcher(str).matches();
   }

   /**
    * 判断是不是合法手机 handset 手机号码
    */
   public static boolean isHandset(String handset)
   {
      try
      {
         if(!handset.substring(0, 1).equals("1"))
            return false;
         if(handset == null || handset.length() != 11)
            return false;
         
         String check = "^[0123456789]+$";
         java.util.regex.Pattern regex = java.util.regex.Pattern.compile(check);
         java.util.regex.Matcher matcher = regex.matcher(handset);

         if(matcher.matches())
            return true;
         else
            return false;
      }
      catch(RuntimeException e)
      {
         return false;
      }
   }

   /**
    * 判断输入的字符串是否符合Email样式.
    * 
    * @param str 传入的字符串
    * @return 是Email样式返回true,否则返回false
    */
   public static boolean isEmail(String email)
   {
      try
      {
         if(email == null || email.length() < 1 || email.length() > 256)
            return false;

         String check = "^([0-9a-zA-Z]+[_.0-9a-zA-Z-]+)@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2,3})$";
         java.util.regex.Pattern regex = java.util.regex.Pattern.compile(check);
         java.util.regex.Matcher matcher = regex.matcher(email);

         if(matcher.matches())
            return true;
         else
            return false;
      }
      catch(RuntimeException e)
      {
         return false;
      }
   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值