首页 > 代码库 > 从后向前截取指定长度的字符串

从后向前截取指定长度的字符串

/**
 * @Title: SubStringSubmitted.java <br/>
 * @Package_name: substringlearning <br/>
 * @date Mar 27, 2016 <br/>
 */
 
import java.io.UnsupportedEncodingException;
 
/**
 * @Title: SubStringSubmitted <br/>
 * @date Mar 27, 2016 <br/>
 */
public class SubStringSubmitted {
 
    /**
     * @Title: main<br/>
     * @Time: Mar 27, 2016 10:39:11 PM <br/>
     */
 
    private static String myStr = "农业银3df行个人网上银行账户密码指的是登录时的密码,支付密"
            + "码指的是在进行网上支付或者是转账时使用的密码,多数银行二个密码是一样的。"           
            + "2、取款密码:指的是在ATM机、柜台等地方取款的密码,一般是6位数纯数字组合。3、"
            + "交易密码:指的是网银登录或者是支付密码,是在网上交易的时候使用的密码,一般为数字和密码1的1,组合";
 
    private static String myStrShort = "农业银3df";
    private static String result1;
    private static int length = 19;
 
    public static void main(String[] args) {
        String result3 = subTextStringFromLast(myStr, length);
 
        try {
            System.out.println(String.format("结果 result3 是 %s,字节数为 %s",
                    result3, result3.getBytes("UTF-8").length));
 
            String result4 = subTextString(myStr, length);
 
            System.out.println(String.format("结果 result4 是 %s,字节数为 %s",
                    result4, result4.getBytes("UTF-8").length));
 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * @Title: subTextStringFromLast<br/>
     * @Description: 默认编码方式为UTF-8,从后向前截取。 <br/>
     * @Time: Mar 27, 2016 9:21:20 AM <br/>
     */
    public static String subTextStringFromLast(String str, int len) {
        if (str.length() < Math.floor(len / 3)) {
            return str;
        }
        int count = 0;
        StringBuffer sb = new StringBuffer();
        String[] ss = str.split("");
        // 这部分的结果--数字和字母是1,而中文是3(我的工程是UTF-8编码,GBK的是2)
        for (int i = ss.length - 1; i > -1; i--) {
            count += ss[i].getBytes().length > 1 ? 3 : 1;
            if (count > len) {
                break;
            }
            sb.append(ss[i]);
        }
        return (sb.toString().length() < str.length()) ?
                sb.reverse().toString() : str;
    }
 
  public static String subTextStringFromLast1(String str, int len) {
          if (str.length() < Math.floor(len / 3)) {
              return str;
         }
          int count = 0;
         StringBuffer sb = new StringBuffer();
         String[] ss = str.split( "");
          // 这部分的结果--数字和字母是1,而中文是3(我的工程是UTF-8编码,GBK的是2)
          for (int i = ss.length - 1; i > -1; i--) {
             count += ss[i].getBytes(). length > 1 ? 3 : 1;
              if (count > len) {
                  break;
             }
             sb.append(ss[i]);
          }
          return sb.reverse().toString();
    }
 
    /**
     * @Title: subTextString<br/>
     * @Description: 默认编码方式为UTF-8,从前向后截取。 <br/>
     * @Time: Mar 27, 2016 9:19:55 AM <br/>
     */
    public static String subTextString(String str, int len) {
        if (str.length() <= Math.floor(len / 3)) {
            return str;
        }
        int count = 0;
        StringBuffer sb = new StringBuffer();
        String[] ss = str.split("");
        // 这部分的结果--数字和字母是1,而中文是3(我的工程是UTF-8编码,GBK的是2)
        for (int i = 1; i < ss.length; i++) {
            count += ss[i].getBytes().length > 1 ? 3 : 1;
            if (count > len) {
                break;
            }
            sb.append(ss[i]);
        }
        // 不需要显示...的可以直接return sb.toString();
        return (sb.toString().length() < str.length()) ?
                sb.append("...").toString() : str;
    }
 
}
 
 

 

从后向前截取指定长度的字符串