上午头儿说了,String getSubStr(String str,int length);中的指定长度可以看成是纯的中文或英文的长度。
那么当英文和中文混合时,比如“我love love 你”,按这个长度截完以后,得到新串的自己长度肯定比2*length小,这样的话,我们就需要把少的字节数给它补上,请问该怎么补啊,不能把英文从中间截开,也不能产生中文乱码,举例:“我love love 你”
如果length=5,则得到的字符为“我love”,此时得到新串的字节长度为6,此时我就应该给它补齐到十个字节,因此后面应该添上“ love”;
那么当英文和中文混合时,比如“我love love 你”,按这个长度截完以后,得到新串的自己长度肯定比2*length小,这样的话,我们就需要把少的字节数给它补上,请问该怎么补啊,不能把英文从中间截开,也不能产生中文乱码,举例:“我love love 你”
如果length=5,则得到的字符为“我love”,此时得到新串的字节长度为6,此时我就应该给它补齐到十个字节,因此后面应该添上“ love”;
/**
* 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)
*
* @param char
* c, 需要判断的字符
* @return boolean, 返回true,Ascill字符
*/
public static boolean isLetter(char c) {
int k = 0x80;
return c / k == 0 ? true : false;
} /**
* 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1
*
* @param String
* s ,需要得到长度的字符串
* @return int, 得到的字符串长度
*/
public static int length(String s) {
if (s == null)
return 0;
char[] c = s.toCharArray();
int len = 0;
for (int i = 0; i < c.length; i++) {
len++;
if (!isLetter(c[i])) {
len++;
}
}
return len;
} /**
* 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位
*
* @author patriotlml
* @param String
* origin, 原始字符串
* @param int
* len, 截取长度(一个汉字长度按2算的)
* @return String, 返回的字符串
*/
public static String substring(String origin, int len) {
if (origin == null || origin.equals("")||len<1)
return "";
byte[] strByte = new byte[len];
if (len > MyUtil.length(origin)){
return origin;}
System.arraycopy(origin.getBytes(), 0, strByte, 0, len);
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 : --len;
}
return new String(strByte, 0, len);
}
用法:
string str=MyUtil.substring(lml,14);
System.out.println(str);
删除,
"abcde".length() ==5
"画蛇填足了".length() ==5
只是这个长度的单位是2bytes ,String类中的其它方法也是按此规则的(双字节编码),直接用好了
,肯定是判断byte数组的最后一位吧,如何判断呢
package test; class SplitString
{
String SplitStr;
int SplitByte; public SplitString(String str,int bytes)
{
SplitStr=str;
SplitByte=bytes;
System.out.println("The String is:′"+SplitStr+"′;SplitBytes="+SplitByte);
} public void SplitIt()
{
int loopCount; loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/SplitByte+1);
System.out.println("Will Split into "+loopCount);
for (int i=1;i<=loopCount ;i++ )
{
if (i==loopCount){
System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
} else {
System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
}
}
}
public static void main(String[] args)
{
SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人 0ewldfls=103",4);
ss.SplitIt();
}
} 可以参考下...