62,614
社区成员
发帖
与我相关
我的任务
分享
package com.ulic.breeze.csdn;
/**
* 从一个字符窜中截取指定的字节长度,字节长度由用户输入
* 如果是汉字,不能截取半个字符,如"我ABC",输入3,截取
* 结果为:我A,"ABC我",输入4,截取结果为ABC而非ABC
* +我的半个
* @author pengzj
*
*/
import java.io.*;
public class InterceptString {
public InterceptString(){
}
/**
* 获得字符串中每个字符所占字节长度,存储在一个INT数组里面
* @param string
* @return 字符字节长度数组
* @throws UnsupportedEncodingException
*/
public static int[] intercept(String string)throws UnsupportedEncodingException{
byte [] bytes = string.getBytes("US-ASCII");
int[]length = new int[bytes.length];
for(int i = 0;i < bytes.length;i++)
length[i] = bytes[i] == 63? 2 : 1;
return length;
}
/**
* 获取符合条件的字符串
* @param length 字符串每个字符所占字节长度数组
* @param str 原字符串
* @param num 字节长度
* @return 截取的字符串
*/
public static String getString(int[]length,String str,int num){
String string= "";
int index = 0;//原字符串中可以被截取的字符的最大索引
int calLength = 0;
for(int i = 0;i < length.length;i++){
calLength += length[i];
if(calLength > num){
index = --i;
break;
}
else index = i;
}
string = str.substring(0, index + 1);//截取字符串
return string;
}
public static void main(String args[])throws UnsupportedEncodingException{
String string = "我ABD多多,刘KK1232";
int byte1 = 1;
int[] length = intercept(string);
String interceptString = getString(length,string,byte1);
System.out.println("原字符串为:"+string+" 要求的字节长度为:"+byte1);
System.out.println("不大于所要求字节长度的子字符串为:"+interceptString);
//for(int i = 0;i < length.length;i++){
//System.out.print(length[i]+" ");
//}
}
}
public static String cut(String str, int len) {
String resultStr = "";
for (int i = 0; i < str.length(); i++) {
if (resultStr.getBytes().length
+ str.substring(i, i + 1).getBytes().length > len) {
break;
} else if (resultStr.getBytes().length
+ str.substring(i, i + 1).getBytes().length <= len) {
resultStr = resultStr + str.substring(i, i + 1);
}
}
return resultStr;
}
public class Test {
public static void main(String[] args) {
String str = "我ABC汉DEF";
String newStr = truncteString(str, 6);
System.out.println(newStr);
}
private static String truncteString(String str, int byteLen) {
StringBuffer sb = new StringBuffer();
char[] chars = str.toCharArray();
int count = 0;
int i = 0;
while (true) {
if (chars[i] > 0xff) {
count += 2;
} else {
count++;
}
if (count > byteLen) {
break;
}
sb.append(chars[i]);
i++;
}
return sb.toString();
}
}
private static String getStrAsBytes(String src,int qlen){
byte[] strBytes = src.getBytes();
int rlen = 0;
boolean chineseFlag = false;
int srcLen = strBytes.length;
if (qlen > srcLen) {
System.out.println("you want more than the source");
} else {
for (int i = 0; i < qlen; i++) {
if(strBytes[i]>0 && strBytes[i]<256){
rlen++;
}
else{
if(chineseFlag){
rlen++;
chineseFlag = false;
}else{
chineseFlag = true;
}
}
}
}
return src.substring(0,rlen);
}
public class Tools {
public static String splitString(String str, int len) {
return splitString(str, len, "...");
}
/**
* 字符串按字节截取
* @param str 原字符
* @param len 截取长度
* @param elide 省略符
* @return String
*/
public static String splitString(String str,int len,String elide) {
if (str == null) {
return "";
}
byte[] strByte = str.getBytes();
int strLen = strByte.length;
int elideLen = (elide.trim().length() == 0) ? 0 : elide.getBytes().length;
if (len >= strLen || len < 1) {
return str;
}
if (len - elideLen > 0) {
len = len - elideLen;
}
int count = 0;
for (int i = 0; i < len; i++) {
int value = (int) strByte[i];
if (value < 0) {
count++;
}
}
if (count % 2 != 0) {
len = (len == 1) ? len + 1 : len - 1;
}
return new String(strByte, 0, len) + elide.trim();
}
public static void main(String args[]){
String s="I am a student.我是一个学生";
System.out.println(Tools.splitString(s,24));
System.out.println(Tools.splitString(s,23));
System.out.println(Tools.splitString(s,25));
System.out.println(Tools.splitString(s,26));
}
}
public String strByteCopy(String str,int nEnd){
if(nEnd==0)
return "";
if(str.length()<=nEnd)
return str;
else{
str=new String(str.getBytes());
char[] charArray=str.toCharArray();
char[] charArrayDesc=new char[nEnd];
System.arraycopy(charArray,0,charArrayDesc,0,nEnd);
return new String(charArrayDesc);
}
}
public String strByteCopy(String str,int nEnd){
if(str.length()<=nEnd)
return str;
else{
str=new String(str.getBytes());
char[] charArray=str.toCharArray();
char[] charArrayDesc=new char[nEnd];
System.arraycopy(charArray,0,charArrayDesc,0,nEnd);
return new String(charArrayDesc);
}
}
public String strByteCopy(String str,int nEnd){
int count=0;
if(nEnd==0)
return "";
byte[] byteStr=str.getBytes();
int k=byteStr.length;
if(k<=nEnd)
return str;
for(int i=0;i<nEnd;i++){
if(byteStr[i]<0)
count++;
}
if(count%2==0)
return new String(byteStr,0,nEnd);
else
return new String(byteStr,0,nEnd-1);
}