Java常用字符串工具类 字符串智能截取(3)

前两篇博文简单分享了一下数字工具类,现在说说字符串工具类。

相信大家都自己封装过或者用过guava封装的Strings,但是有没有可以智能截取,比如说“截取整数第二个到倒数第二个”的字符串。你是否还需要自己写str.substring(1,str.length()-2)。如果是的话,请继续往下看吧。暂时还未见过可以反向截取字符串的。一般都是substring(str, start, end)或者substring(str, len);而这里的参数都必须是正数,否则就会报错。所以为了改善这些方法,我简单封装了一下substring这个方法,提供了4种最常用的方法:

  • subStrStart(String str, int end),正向截取
  • subStrEnd(String str, int start),反向截取
  • subStr(String str, int length),支持双向截取,length>0正向截取,<0,反向截取
  • subStr(String str, int start, int end),支持双向截取,start、length>0正向截取,<0,反向截取。

具体代码如下:

/**
 * 从头开始截取
 *
 * @param str 字符串
 * @param end 结束位置
 * @return
 */
public static String subStrStart(String str, int end){
  return subStr(str, 0, end);
} 

/**
 * 从尾开始截取
 *
 * @param str 字符串
 * @param start 开始位置
 * @return
 */
public static String subStrEnd(String str, int start){
  return subStr(str, str.length()-start, str.length());
} 

/**
 * 截取字符串 (支持正向、反向截取)<br/>
 *
 * @param str 待截取的字符串
 * @param length 长度 ,>=0时,从头开始向后截取length长度的字符串;<0时,从尾开始向前截取length长度的字符串
 * @return 返回截取的字符串
 * @throws RuntimeException
 */
public static String subStr(String str, int length) throws RuntimeException{
  if(str==null){
    throw new NullPointerException("字符串为null");
  }
  int len = str.length();
  if(len<Math.abs(length)){
    throw new StringIndexOutOfBoundsException("最大长度为"+len+",索引超出范围为:"+(len-Math.abs(length)));
  }
  if(length>=0){
    return subStr(str, 0,length);
  }else{
    return subStr(str, len-Math.abs(length), len);
  }
} 

/**
 * 截取字符串 (支持正向、反向选择)<br/>
 *
 * @param str 待截取的字符串
 * @param start 起始索引 ,>=0时,从start开始截取;<0时,从length-|start|开始截取
 * @param end 结束索引 ,>=0时,从end结束截取;<0时,从length-|end|结束截取
 * @return 返回截取的字符串
 * @throws RuntimeException
 */
public static String subStr(String str, int start, int end) throws RuntimeException{
  if(str==null){
    throw new NullPointerException("");
  }
  int len = str.length();
  int s = 0;//记录起始索引
  int e = 0;//记录结尾索引
  if(len<Math.abs(start)){
    throw new StringIndexOutOfBoundsException("最大长度为"+len+",索引超出范围为:"+(len-Math.abs(start)));
  }else if(start<0){
    s = len - Math.abs(start);
  }else if(start<0){
    s=0;
  }else{//>=0
    s = start;
  }
  if(len<Math.abs(end)){
    throw new StringIndexOutOfBoundsException("最大长度为"+len+",索引超出范围为:"+(len-Math.abs(end)));
  }else if (end <0){
    e = len - Math.abs(end);
  }else if (end==0){
    e = len;
  }else{//>=0
    e = end;
  }
  if(e<s){
    throw new StringIndexOutOfBoundsException("截至索引小于起始索引:"+(e-s));
  } 

  return str.substring(s, e);
}

写一个main方法来测试一下吧:

public static void main(String[] args) {
  String str = "12345abcde";
  System.out.println("--------------------------------");
  System.out.println("正向截取长度为4,结果:\n" + StringsUtil.subStr(str, 4));
  System.out.println("反向截取长度为4,结果:\n" + StringsUtil.subStr(str, -4));
  System.out.println("--------------------------------");
  System.out.println("正向截取到第4个字符的位置,结果:\n" + StringsUtil.subStrStart(str, 4));
  System.out.println("反向截取到第4个字符的位置,结果:\n" + StringsUtil.subStrEnd(str, 4));
  System.out.println("--------------------------------");
  System.out.println("从第2个截取到第9个,结果:\n" + StringsUtil.subStr(str, 1, 9));
  System.out.println("从第2个截取到倒数第1个,结果:\n" + StringsUtil.subStr(str, 1, -1));
  System.out.println("从倒数第4个开始截取,结果:\n" + StringsUtil.subStr(str, -4, 0));
  System.out.println("从倒数第4个开始截取,结果:\n" + StringsUtil.subStr(str, -4, 10));
}

结果如下:

再附赠一个小功能吧:字符串数组用指定字符串链接。

/**
 * 用指定字符串数组相连接,并返回
 *
 * @param strs 字符串数组
 * @param splitStr 连接数组的字符串
 * @return
 */
public static String join(String[] strs, String splitStr){
  if(strs!=null){
    if(strs.length==1){
      return strs[0];
    }
    StringBuffer sb = new StringBuffer();
    for (String str : strs) {
      sb.append(str).append(splitStr);
    }
    if(sb.length()>0){
      sb.delete(sb.length()-splitStr.length(), sb.length());
    }
    return sb.toString();
  }
  return null;
}

效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java 随机取字符串的工具类

    一.Java随机数的产生方式 在Java中,随机数的概念从广义上将,有三种. 1.通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字. 2.通过Math.random()返回一个0到1之间的double值. 3.通过Random类来产生一个随机数,这个是专业的Random工具类,功能强大. 二.Random类API说明 1.Java API说明 Random类的实例用于生成伪随机数流.此类使用 48 位的种子,使用线性同余公式对其进行修改(请参阅 D

  • java常用工具类之DES和Base64加密解密类

    一.DES加密和解密 package com.itjh.javaUtil; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecExc

  • Java实现的3des加密解密工具类示例

    本文实例讲述了Java实现的3des加密解密工具类.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.poi.poifs.property.Child; import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax

  • Java实现的文本字符串操作工具类实例【数据替换,加密解密操作】

    本文实例讲述了Java实现的文本字符串操作工具类.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.commons.lang.StringUtils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.BreakIterator; import java.util.Array

  • Java实现的DES加密解密工具类实例

    本文实例讲述了Java实现的DES加密解密工具类.分享给大家供大家参考,具体如下: 一个工具类,很常用,不做深入研究了,那来可直接用 DesUtil.java package lsy; import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; imp

  • 一个Java配置文件加密解密工具类分享

    常见的如: 数据库用户密码,短信平台用户密码,系统间校验的固定密码等.本工具类参考了 <Spring.3.x企业应用开发实战>一书 5.3节的实现.完整代码与注释信息如下: 复制代码 代码如下: package com.cncounter.util.comm; import java.security.Key;import java.security.SecureRandom; import javax.crypto.Cipher;import javax.crypto.KeyGenerato

  • Java实现产生随机字符串主键的UUID工具类

    本文实例讲述了Java实现产生随机字符串主键的UUID工具类.分享给大家供大家参考,具体如下: package com.gcloud.common; import java.net.InetAddress; import java.util.UUID; /** * uuid工具类 * Created by charlin on 2017/9/9. */ public class UUIDUtil { private String sep = ""; private static int

  • java中常用工具类之字符串操作类和MD5加密解密类

    java中常用的工具类之String和MD5加密解密类 我们java程序员在开发项目的是常常会用到一些工具类.今天我分享一下我的两个工具类,大家可以在项目中使用. 一.String工具类 package com.itjh.javaUtil; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import

  • Java中判断字符串是中文或者英文的工具类分享

    直接上代码: 复制代码 代码如下: import java.util.regex.Matcher; import java.util.regex.Pattern; /**  *  * <p>  * ClassName ShowChineseInUnicodeBlock  * </p>  * <p>  * Description 提供判断字符串是中文或者是英文的一种思路  * </p>  *  * @author wangxu wangx89@126.com

  • Java常用时间工具类总结(珍藏版)

    目录 常量介绍 相关方法 工具类源码 肝了两天,重新整理了下时间工具类,以后我就以该时间工具类进行项目开发了,后会不定期更新功能,也欢迎留言需求,让工具类不断的完善. 常量介绍 相关方法 工具类源码 package com.zyq.util.date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar;

  • Java常用字符串工具类 字符串智能截取(3)

    前两篇博文简单分享了一下数字工具类,现在说说字符串工具类. 相信大家都自己封装过或者用过guava封装的Strings,但是有没有可以智能截取,比如说"截取整数第二个到倒数第二个"的字符串.你是否还需要自己写str.substring(1,str.length()-2).如果是的话,请继续往下看吧.暂时还未见过可以反向截取字符串的.一般都是substring(str, start, end)或者substring(str, len);而这里的参数都必须是正数,否则就会报错.所以为了改善

  • Java常用数字工具类 数字转汉字(1)

    本人是从事互联网金融行业的,所以会接触到一些金融类的问题,常见的一种就是数字转汉字大小写的问题.所以抽空就写了一个小小的工具类,实现了数字转汉字.大数相加.相减.相乘的工具类,希望能帮助有需求的同行们.本篇就分享一下数字转化为汉字的思路吧. 数字转汉字的原理: 拆分:由于整数部分要加权值,而小数部分直接转换即可,所以首先要将数字拆分成整数+小数: 整数处理:按照我们的中国人的习惯,把数字格式化成4位一组,不足4位前面补0.每次处理4位,按位匹配数组中的汉字+权值.即按照数值找数字数组(num_l

  • Java常用数字工具类 大数乘法、加法、减法运算(2)

    上篇分享了一下数字转汉字的小功能,这里再分享一下大数相乘.相加.相减的功能.其他的不做过多的铺垫了,我先讲一下各个功能的计算原理. Ⅰ. 乘法运算 为什么先说乘法运算--因为我先做了乘法运算.其实思路也是很多的,但是最终我参考了网络上的一种计算方案,然后做了很多的修改.感觉这个在思路上应该是比较简单的. 简单点说:把数拆分成整数小数分别进行乘法运算,然后将结果放入一个特定长度的数组中,在放入是要计算存放的偏移位置,最后再对这个进行处理(进位.标记等),得到最终的结果. 是不是有点晕.请我详细说一

  • java常用工具类 Reflect反射工具类、String字符串工具类

    本文实例为大家分享了java常用工具类的具体代码,供大家参考,具体内容如下 Reflect反射工具类 package com.jarvis.base.util; /** * * * @Title: ReflectHelper.java * @Package com.jarvis.base.util * @Description: 反射工具类 * @version V1.0 */ public class ReflectHelper { /** * 提指定的类载入以系统中 * * @param n

  • Java语言Lang包下常用的工具类介绍

    无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都很不错,不用你写,不用你调试,只要你发现. 在 Apache Jakarta Common 中, Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的,几乎你所知道的名气比较大的软件里面都有用到它,包括 Tomcat, Weblogic, Websphere, Eclipse 等等.我们就从这个包开始介绍整个 common 项

  • C#实现简易的加密、解密字符串工具类实例

    本文实例讲述了C#实现简易的加密.解密字符串工具类.分享给大家供大家参考.具体如下: 这里的类CypherHelper是一个用于加密.解密字符串的工具类~~~,适合于方便地加密.解密长度较短的密码等字符串(C#里面已经有了库System.Security.Cryptography,对于比较长的字符串或流来说是一个更好的选择) 类CypherHelper代码: class CypherHelper { /// <summary> /// 加密字符串 /// </summary> //

  • javaScript字符串工具类StringUtils详解

    本文实例为大家分享了javaScript字符串工具类的具体代码,供大家参考,具体内容如下 StringUtils = { isEmpty: function(input) { return input == null || input == ''; }, isNotEmpty: function(input) { return !this.isEmpty(input); }, isBlank: function(input) { return input == null || /^\s*$/.t

  • 常用java正则表达式的工具类

    本文实例为大家分享了java正则表达式工具类的具体代码,供大家参考,具体内容如下 import com.google.common.base.Strings; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 常用的正则表达式 * Created by tookbra on 2016/4/7. */ public class RegexUtils { /** * 判断是否是正确的IP地址 * * @para

  • Java中StringUtils工具类进行String为空的判断解析

    判断某字符串是否为空,为空的标准是str==null或str.length()==0 1.下面是StringUtils判断是否为空的示例: StringUtils.isEmpty(null) = true StringUtils.isEmpty("") = true StringUtils.isEmpty(" ") = false //注意在 StringUtils 中空格作非空处理 StringUtils.isEmpty(" ") = fals

随机推荐