您的位置:首页 > 编程语言 > Java开发

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