由于Java是基于Unicode编码的,因此,一个汉字的长度为1,而不是2。但有时需要以字节单位获得字符串的长度。例如,“123abc长城”按字节长度计算是10,而按Unicode计算长度是8。为了获得10,需要从头扫描根据字符的Ascii来获得具体的长度。如果是标准的字符,Ascii的范围是0至255,
如果是汉字或其他全角字符,Ascii会大于255。
如果你只是要数组的长度的话,那么任意的数组都有length属性,直接访问就可以了。如果你想要字符串数组中所有字符的长度,就得循环了。
string[]
a
=
{"111","22","3333","44444"};
int
rs=0;
for(
int
i=0
;
i<alength
;
i++
){
rs+=a[i]length();
}
//
rs为字符数组中所有字符串的长度之和。
String s="gsdhgjsjsgdjh";\x0d\int a=slength();//一定要有括号;\x0d\int a[]={45,5,8,45,21,6,68,4,8}\x0d\int b=alength;//没有括号偶;b=9\x0d\int a[]={{45,25},{89,6,7,1},{6,89,1},{9,6,2,1,2}};\x0d\int b=alength//b=4,\x0d\int c=a[0]length// c=2\x0d\int d=a[3]length//d=5;;
public String getStr(String strValue, int intKey) {
String strResult = "";
char[] charStr = strValuetoCharArray();
for (char charItem : charStr) {
if ((charItem + "")getBytes()length > 1) {
intKey -= 2;
}
else {
intKey --;
}
if (intKey < 0) {
break;
}
else {
strResult += charItem;
}
}
if (intKey > 0) {
Systemoutprintln("提供的数字超过字符串的长度,在此处做处理");
}
return strResult;
}
Java规定了字符的内码要用UTF-16编码,一个字符是2个字节。外码字符所占字节取决于具体编码。字符和字节是不一样的。
外码编码不同,字符和字节的换算不同,几种常见的编码换算如下:
ASCII编码是单字节编码,只有英文字符,不能编码汉字。
GBK编码1个英文字符是1个字节,一个汉字是是2个字节。
UTF-8编码1个英文字符是1个字节,一个汉字是3个字节。
Unicode编码1个英文字符是2个字节,一个汉字是2个字节。
扩展资料:
汉字编码的困难点 汉字进入计算机,有许多困难,其原因主要有三点:
①数量庞大:一般认为,汉字总数已超过6万个(包括简化字)。虽有研究者主张规定3000多或4000字作为当代通用汉字,但仍比处理由二三十个字母组成的拼音文字要困难得多。
②字形复杂:有古体今体,繁体简体,正体异体;而且笔画相差悬殊,少的一笔,多的达36笔,简化后平均为98笔。
③存在大量一音多字和一字多音的现象:汉语音节416个,分声调后为1295个(根据《现代汉语词典》统计,轻声39个未计)。以1万个汉字计算,每个不带调的音节平均超过24个汉字,每个带调音节平均超过77个汉字。有的同音同调字多达66个。一字多音现象也很普遍。
参考资料来源:百度百科-编码
package comitheima;
/
10、 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
@author 281167413@qqcom
/
public class Test10 {
public static void main(String[] args) {
String srcStr1 = "我ABC";
String srcStr2 = "我ABC汉DEF";
splitString(srcStr1, 4);
splitString(srcStr2, 6);
}
public static void splitString(String src, int len) {
int byteNum = 0;
if (null == src) {
Systemoutprintln("The source String is null!");
return;
}
byteNum = srclength();
byte bt[] = srcgetBytes(); // 将String转换成byte字节数组
if (len > byteNum) {
len = byteNum;
}
// 判断是否出现了截半,截半的话字节对于的ASC码是小于0的值
if (bt[len] < 0) {
String subStrx = new String(bt, 0, --len);
Systemoutprintln("subStrx==" + subStrx);
} else {
String subStrx = new String(bt, 0, len);
Systemoutprintln("subStrx==" + subStrx);
}
}
}
ps:看比人博客上面的,具体的没 *** 作过,
以上就是关于java 按字节获取字符串长度全部的内容,包括:java 按字节获取字符串长度、java里如何获取字符数组中有内容的字符长度、java中如何获取数组长度和字符串长度的代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)