java按指定的字节Byte的起始位置截取长度截取字符串
2017-06-11 16:16
1326 查看
java按指定的字节Byte的起始位置截取长度截取字符串,自动舍弃超出字节长度的汉字
package com.cn.util; import java.io.UnsupportedEncodingException; /** * @author Administrator * */ public class StringUtil { /** * 判断是否是一个中文汉字 * * @param c * 字符 * @return true表示是中文汉字,false表示是英文字母 * @throws UnsupportedEncodingException * 使用了JAVA不支持的编码格式 */ public static boolean isChineseChar(char c) throws UnsupportedEncodingException { // 如果字节数大于1,是汉字 // 以这种方式区别英文字母和中文汉字并不是十分严谨,但在这个题目中,这样判断已经足够了 return String.valueOf(c).getBytes("utf-8").length > 1; } /** * 计算当前String字符串所占的总Byte长度 * @param args * 要截取的字符串 * @return * 返回值int型,字符串所占的字节长度,如果args为空或者“”则返回0 * @throws UnsupportedEncodingException */ public static int getStringByteLenths(String args) throws UnsupportedEncodingException{ return args!=null&&args!=""? args.getBytes("utf-8").length:0; } /** * 获取与字符串每一个char对应的字节长度数组 * @param args * 要计算的目标字符串 * @return int[] * 数组类型,返回与字符串每一个char对应的字节长度数组 * @throws UnsupportedEncodingException */ public static int[] getByteLenArrays(String args) throws UnsupportedEncodingException{ char[] strlen=args.toCharArray(); int[] charlen=new int[strlen.length]; for (int i = 0; i < strlen.length; i++) { charlen[i]=String.valueOf(strlen[i]).getBytes("utf-8").length; } return charlen; } /** * 按字节截取字符串 ,指定截取起始字节位置与截取字节长度 * * @param orignal * 要截取的字符串 * @param offset * 截取Byte长度; * @return * 截取后的字符串 * @throws UnsupportedEncodingException * 使用了JAVA不支持的编码格式 */ public static String substringByte(String orignal,int start, int count){ //如果目标字符串为空,则直接返回,不进入截取逻辑; if(orignal==null || "".equals(orignal))return orignal; //截取Byte长度必须>0 if (count <= 0) return orignal; //截取的起始字节数必须比 if(start<0) start=0; //目标char Pull buff缓存区间; StringBuffer buff = new StringBuffer(); try { //截取字节起始字节位置大于目标String的Byte的length则返回空值 if (start >= getStringByteLenths(orignal)) return null; // int[] arrlen=getByteLenArrays(orignal); int len=0; char c; //遍历String的每一个Char字符,计算当前总长度 //如果到当前Char的的字节长度大于要截取的字符总长度,则跳出循环返回截取的字符串。 for (int i = 0; i < orignal.toCharArray().length; i++) { c=orignal.charAt(i); //当起始位置为0时候 if(start==0){ len+=String.valueOf(c).getBytes("utf-8").length; if(len<=count) buff.append(c); else break; }else{ //截取字符串从非0位置开始 len+=String.valueOf(c).getBytes("utf-8").length; if(len>=start&&len<=start+count){ buff.append(c); } if(len>start+count) break; } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } //返回最终截取的字符结果; //创建String对象,传入目标char Buff对象 return new String(buff); } /** * 截取指定长度字符串 * @param orignal * 要截取的目标字符串 * @param count * 指定截取长度 * @return * 返回截取后的字符串 */ public static String substringByte(String orignal, int count){ return substringByte(orignal,0,count); } public static void main(String[] args) { // 原始字符串 String s = "我ydj爱JAVA"; System.out.println("原始字符串:" + s); try { System.out.println("原始字符串字节长度:" + s.getBytes("utf-8").length); System.out.println("截取前6位:" + StringUtil.substringByte(s, 7)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }
相关文章推荐
- 从中英混合字符串中截取指定字节长度的文本
- Java按字节长度截取字符串之二
- java中按字节数的长度来截取字符串,并以...来忽略
- 按指定长度截取字符串(以字节计算长度)
- 用Java实现按字节长度截取中英文数字字符串的方法总结
- java中截取指定长度的字符串的方法
- Java字符串按字节数截取长度
- Java实现按字节长度截取字符串的方法
- Java按字节长度截取字符串
- 不区分汉字还是英文和数字,按指定字节长度截取字符串
- 用Java实现按字节长度截取字符串的方法
- 用Java实现按字节长度截取字符串的方法
- C#如何根据字节截取字符串指定长度
- Java按字节长度截取字符串
- 用Java实现按字节长度截取字符串的方法
- java和Js 按字节来截取字符串长度(为了符合数据库varchar)
- Java按字节长度截取字符串
- Java实现按字节长度截取字符串
- C# 汉字的字符串截取指定字节的长度
- 用Java实现按字节长度截取字符串