1. java中如何統計一個字元串的長度
使用字元串變數。
2. 簡單的JAVA字元串長度計算的實現
簡單實現代碼如下:
public
class
stringlength
{
/**
*
獲取字元串的長度,如果有中文,則每個中文字元計為2位
*
@param
value
指定的字元串
*
@return
字元串的長度
*/
public
static
int
length(string
value)
{
int
valuelength
=
0;
string
chinese
=
"[\u0391-\uffe5]";
/*
獲取欄位值的長度,如果含中文字元,則每個中文字元長度為2,否則為1
*/
for
(int
i
=
0;
i
<
value.length();
i++)
{
/*
獲取一個字元
*/
string
temp
=
value.substring(i,
i
+
1);
/*
判斷是否為中文字元
*/
if
(temp.matches(chinese))
{
/*
中文字元長度為2
*/
valuelength
+=
2;
}
else
{
/*
其他字元長度為1
*/
valuelength
+=
1;
}
}
return
valuelength;
}
public
static
void
main(string
args[]){
string
str
=
"hello你好";
system.out.println(stringlength.length(str));
}
}
3. JAVA中「Abc漢字」的長度是
字元串長度是:5
在JVM中占的位元組數是10,因為java中字元都是用unicode編碼的,每一個字元占兩個位元組
4. 如何計算中文字元的長度java
通過String自帶的length()方法獲取字元串長度。
String a="abcdefg";//定義一個字元串
int len = a.length();//通過length獲取字元串長度,這里等於7
length()該方法返回此字元串的長度。長度是等於Unicode代碼單元中的字元串的數目。
5. java中如何統計一個字元串的長度
首先打開eclipse
6. java中字元大小問題
你的理解有誤,呵呵,通俗點說吧:
給你兩個房子,都是100平米,一個裡面裝個豬,一個裡面裝只雞,你可以說房子大小相等,你能說
豬和雞大小相等么?
豬有豬的編碼,雞有雞的編碼,各自都不一樣!
另外,2個位元組,看似很渺小,一個位元組8個比特位,可以表示2的8次方既:256種狀態
兩個位元組:2的16次方,65536種狀態,這算完事了嗎?告訴你沒呢..
下面是掃盲:你認真看,是我復制知乎大佬的,對你以後絕對幫助很大:
各位路過朋友看完後,如果覺得不錯點個贊謝謝...
很久很久以前,有一群人,他們決定用8個可以開合的晶體管來組合成不同的狀態,以表示世界上的萬物。
他們看到8個開關狀態是好的,於是他們把這稱為」位元組「。
再後來,他們又做了一些可以處理這些位元組的機器,機器開動了,可以用位元組來組合出很多狀態,狀態開始變來變去。
他們看到這樣是好的,於是它們就這機器稱為」計算機「。
開始計算機只在美國用。八位的位元組一共可以組合出256(2的8次方)種不同的狀態。
他們把其中的編號從0開始的32種狀態分別規定了特殊的用途,一但終端、列印機遇上約定好的這些位元組被傳過來時,就要做一些約定的動作:
遇上0×10, 終端就換行;
遇上0×07, 終端就向人們嘟嘟叫;
遇上0x1b, 列印機就列印反白的字,或者終端就用彩色顯示字母。
他們看到這樣很好,於是就把這些0×20以下的位元組狀態稱為」控制碼」。
他們又把所有的空 格、標點符號、數字、大小寫字母分別用連續的位元組狀態表示,一直編到了第127號,這樣計算機就可以用不同位元組來存儲英語的文字了。
大家看到這樣,都感覺 很好,於是大家都把這個方案叫做 ANSI 的」Ascii」編碼(American Standard Code for Information Interchange,美國信息互換標准代碼)。
當時世界上所有的計算機都用同樣的ASCII方案來保存英文文字。
後來,就像建造巴比倫塔一樣,世界各地都開始使用計算機,但是很多國家用的不是英文,他們的字母里有許多是ASCII里沒有的,為了可以在計算機保存他們的文字
他們決定採用 127號之後的空位來表示這些新的字母、符號,還加入了很多畫表格時需要用下到的橫線、豎線、交叉等形狀,一直把序號編到了最後一個狀態255。
從128 到255這一頁的字元集被稱」擴展字元集「。
從此之後,貪婪的人類再沒有新的狀態可以用了,美帝國主義可能沒有想到還有第三世界國家的人們也希望可以用到計算機吧!
等中國人們得到計算機時,已經沒有可以利用的位元組狀態來表示漢字,況且有6000多個常用漢字需要保存呢。
但是這難不倒智慧的中國人民,我們不客氣地把那些127號之後的奇異符號們直接取消掉, 規定:一個小於127的字元的意義與原來相同,但兩個大於127的字元連在一起時,就表示一個漢字
前面的一個位元組(他稱之為高位元組)從0xA1用到0xF7
後面一個位元組(低位元組)從0xA1到0xFE
這樣我們就可以組合出大約7000多個簡體漢字了。
在這些編碼里,我們還把數學符號、羅馬希臘的字母、日文的假名們都編進去了,連在 ASCII 里本來就有的數字、標點、字母都統統重新編了兩個位元組長的編碼,這就是常說的」全形」字元,而原來在127號以下的那些就叫」半形」字元了。
中國人民看到這樣很不錯,於是就把這種漢字方案叫做 「GB2312「。
GB2312 是對 ASCII 的中文擴展。但是中國的漢字太多了,我們很快就就發現有許多人的人名沒有辦法在這里打出來,特別是某些很會麻煩別人。
於是我們不得不繼續把GB2312 沒有用到的碼位找出來老實不客氣地用上。
後來還是不夠用,於是乾脆不再要求低位元組一定是127號之後的內碼,只要第一個位元組是大於127就固定表示這是一個漢字的開始,不管後面跟的是不是擴展字元集里的內容。
結果擴展之後的編碼方案被稱為 GBK 標准,GBK包括了GB2312 的所有內容,同時又增加了近20000個新的漢字(包括繁體字)和符號。
後來少數民族也要用電腦了,於是我們再擴展,又加了幾千個新的少數民族的字,GBK擴成了 GB18030。
從此之後,中華民族的文化就可以在計算機時代中傳承了。
中國的程序員們看到這一系列漢字編碼的標準是好的,於是通稱他們叫做 「DBCS「(Double Byte Charecter Set 雙位元組字元集)。
在DBCS系列標准里,最大的特點是兩位元組長的漢字字元和一位元組長的英文字元並存於同一套編碼方案里,因此他們寫的程序為了支持中文處理,必須要注意字串里的每一個位元組的值,如果這個值是大於127的,那麼就認為一個雙位元組字元集里的字元出現了。
那時候凡是受過加持,會編程的計算機僧侶們都要每天念下面這個咒語數百遍: 「一個漢字算兩個英文字元!一個漢字算兩個英文字元……」因為當時各個國家都像中國這樣搞出一套自己的編碼標准,結果互相之間誰也不懂誰的編碼,誰也不支持別人的編碼,連大陸和台灣這樣只相隔了150海里,使用著同一種語言的兄弟地區,也分別採用了不同的 DBCS 編碼方案——當時的中國人想讓電腦顯示漢字,就必須裝上一個」漢字系統」
專門用來處理漢字的顯示、輸入的問題,像是那個台灣的愚昧封建人士寫的算命程序就必須加裝另一套支持 BIG5 編碼的什麼」倚天漢字系統」才可以用,裝錯了字元系統,顯示就會亂了套!這怎麼辦?
而且世界民族之林中還有那些一時用不上電腦的窮苦人民,他們的文字又怎麼辦?
真是計算機的巴比倫塔命題啊!
正在這時,大天使加百列及時出現了——一個叫 ISO(國際標誰化組織)的國際組織決定著手解決這個問題。
他們採用的方法很簡單:廢了所有的地區性編碼方案,重新搞一個包括了地球上所有文化、所有字母和符號 的編碼!
他們打算叫它」Universal Multiple-Octet Coded Character Set」,簡稱 UCS, 俗稱 「unicode「。
unicode開始制訂時,計算機的存儲器容量極大地發展了,空間再也不成為問題了。
於是 ISO 就直接規定必須用兩個位元組,也就是16位來統一表示所有的字元,對於ASCII里的那些「半形」字元,unicode包持其原編碼不變,只是將其長度由原來的8位擴展為16位,而其他文化和語言的字元則全部重新統一編碼。由於」半形」英文符號只需要用到低8位,所以其高8位永遠是0,因此這種大氣的方案在保存英文文本時會多浪費一倍的空間。
這時候,從舊社會里走過來的程序員開始發現一個奇怪的現象:他們的 strlen 函數靠不住了,一個漢字不再是相當於兩個字元了,而是一個!
是的,從unicode開始,無論是半形的英文字母,還是全形的漢字,它們都是統一的」一個字元「!
同時,也都是統一的」兩個位元組「,請注意」字元」和」位元組」兩個術語的不同,「位元組」是一個8位的物理存貯單元,而「字元」則是一個文化相關的符號。
在unicode中,一個字元就是兩個位元組。一個漢字算兩個英文字元的時代已經快過去了。unicode同樣也不完美,這里就有兩個的問題,一個是,如何才能區別unicode和ascii?
計算機怎麼知道三個位元組表示一個符號,而不是分別表示三個符號呢?
第二個問題是,我們已經知道,英文字母只用一個位元組表示就夠了,如果unicode統一規定,每個符號用三個或四個位元組表示,那麼每個英文字母前都必然有二到三個位元組是0,這對於存儲空間來說是極大的浪費,文本文件的大小會因此大出二三倍,這是難以接受的。
unicode在很長一段時間內無法推廣,直到互聯網的出現,為解決unicode如何在網路上傳輸的問題,於是面向傳輸的眾多 UTF(UCS Transfer Format)標准出現了,顧名思義,UTF-8就是每次8個位傳輸數據,而UTF-16就是每次16個位。
UTF-8就是在互聯網上使用最廣的一種unicode的實現方式,這是為傳輸而設計的編碼,並使編碼無國界,這樣就可以顯示全世界上所有文化的字元了。
UTF-8最大的一個特點,就是它是一種變長的編碼方式。
它可以使用1~4個位元組表示一個符號,根據不同的符號而變化位元組長度,當字元在ASCII碼的范圍時,就用一個位元組表示,保留了ASCII字元一個位元組的編碼做為它的一部分,注意的是unicode一個中文字元佔2個位元組,而UTF-8一個中文字元佔3個位元組)。
從unicode到uft-8並不是直接的對應,而是要過一些演算法和規則來轉換。
最後簡單總結一下:
中國人民通過對 ASCII 編碼的中文擴充改造,產生了 GB2312 編碼,可以表示6000多個常用漢字。
漢字實在是太多了,包括繁體和各種字元,於是產生了 GBK 編碼,它包括了 GB2312 中的編碼,同時擴充了很多。
中國是個多民族國家,各個民族幾乎都有自己獨立的語言系統,為了表示那些字元,繼續把 GBK 編碼擴充為 GB18030 編碼。
每個國家都像中國一樣,把自己的語言編碼,於是出現了各種各樣的編碼,如果你不安裝相應的編碼,就無法解釋相應編碼想表達的內容。
終於,有個叫 ISO 的組織看不下去了。他們一起創造了一種編碼 UNICODE ,這種編碼非常大,大到可以容納世界上任何一個文字和標志。所以只要電腦上有 UNICODE 這種編碼系統,無論是全球哪種文字,只需要保存文件的時候,保存成 UNICODE 編碼就可以被其他電腦正常解釋。
UNICODE 在網路傳輸中,出現了兩個標准 UTF-8 和 UTF-16,分別每次傳輸 8個位和 16個位。
於是就會有人產生疑問,UTF-8 既然能保存那麼多文字、符號,為什麼國內還有這么多使用 GBK 等編碼的人?
因為 UTF-8 等編碼體積比較大,占電腦空間比較多,如果面向的使用人群絕大部分都是中國人,用 GBK 等編碼也可以。
如果你滿意點個贊謝謝!!
7. java中獲取含中文的字元串長度
publicclassSplitTest{
publicstaticvoidmain(String[]args){
Strings="abc,大家好abc才是真的好abc";
s=s.replaceAll("[^(\u4e00-\u9fa5)]","");
System.out.println(s+" 長度="+s.length());
}
}
8. Java怎麼判斷判斷某個欄位中漢字的長度在2到20內
代碼如下:
/**
* 在Java中按位元組獲得字元串長度的兩種方法
*
*/
public class App
{
public static void main( String[] args ) throws UnsupportedEncodingException
{
String str = "只";
System.out.println(getWordCount(str));
System.out.println(getWordCountRegex(str));
System.out.println(getWordCountCode(str,"GBK"));
System.out.println(getWordCountCode(str,"UTF-8"));
}
/*由於Java是基於Unicode編碼的,因此,一個漢字的長度為1,而不是2。
* 但有時需要以位元組單位獲得字元串的長度。例如,「123abc長城」按位元組長度計算是10,而按Unicode計算長度是8。
* 為了獲得10,需要從頭掃描根據字元的Ascii來獲得具體的長度。如果是標準的字元,Ascii的范圍是0至255,如果是漢字或其他全形字元,Ascii會大於255。
* 因此,可以編寫如下的方法來獲得以位元組為單位的字元串長度。*/
public static int getWordCount(String s)
{
int length = 0;
for(int i = 0; i < s.length(); i++)
{
int ascii = Character.codePointAt(s, i);
if(ascii >= 0 && ascii <=255)
length++;
else
length += 2;
}
return length;
}
/*基本原理是將字元串中所有的非標准字元(雙位元組字元)替換成兩個標准字元(**,或其他的也可以)。這樣就可以直接例用length方法獲得字元串的位元組長度了*/
public static int getWordCountRegex(String s)
{
s = s.replaceAll("[^\\x00-\\xff]", "**");
int length = s.length();
return length;
}
/*按特定的編碼格式獲取長度*/
public static int getWordCountCode(String str, String code) throws UnsupportedEncodingException{
return str.getBytes(code).length;
}
}
9. java 怎樣判斷字元串的長度
/**
*得到一個字元串的長度,顯示的長度,一個漢字或日韓文長度為1,英文字元長度為0.5
*@paramStrings需要得到長度的字元串
*@returnint得到的字元串長度
*/
publicstaticdoublegetLength(Strings){
doublevalueLength=0;
Stringchinese="[u4e00-u9fa5]";
//獲取欄位值的長度,如果含中文字元,則每個中文字元長度為2,否則為1
for(inti=0;i<s.length();i++){
//獲取一個字元
Stringtemp=s.substring(i,i+1);
//判斷是否為中文字元
if(temp.matches(chinese)){
//中文字元長度為1
valueLength+=1;
}else{
//其他字元長度為0.5
valueLength+=0.5;
}
}
//進位取整
returnMath.ceil(valueLength);
}
10. java中如何計算一個字元串的byte長度(一個漢字多少字元)
中文並不一定是占兩個位元組的,具體佔多少位元組是跟具體的編碼方式相關的。
比如說:GB2312、GBK、GB18030
編碼是佔用兩個位元組的,但是
UTF-8
編碼的話至少需要佔用三個位元組。
有一個簡單方法,就是把大於
0xff
的字元都作為兩個字元(當然是在
GBK
環境下)
Java
code
publicstaticint
count(String
str)
{
if(str
==null||
str.length
==0)
{
return0;
}
int
count
=0;
char[]
chs
=
str.toCharArray();
for(int
i
=0;
i
<
chs.length;
i++)
{
count
+=
(chs[i]
>0xff)
?2
:
1;
}
return
count;
}
或者你直接使用
int
len
=
str.getBytes("gbk");上面代碼假設你的資料庫編碼格式是
GBK
的,而不是
UTF-8
的,如果是
UTF-8
的話,上面的代碼無效!1位元組等於8比特,一個字母是1位元組,而一個漢字要用2個位元組。一個漢字=2個字元