本文目錄一覽:
java截取中文字符串。
public static void main(String args[])
{
String str=”看看以下回答是否解決了您的疑問” ;
//提取子字符串,頭一個表示開頭的索引(包括),後一個表示結束的索引(不包括)
//索引是在字符串的位置,從0開始
//str.substring(0, 7)表示從第0位到第6位(因為不包含第七位)
//英文字符串也是類似的
String substr = str.substring(0, 7) ;
System.out.println(substr);
}
求截取帶中文的字符串的java方法。
樓主你好,很高興能回答你這個很有挑戰性的問題,首先我談談我對上面9個例子的理解,即這個方法應該實現的功能:
這個方法與JDK String原有的方法substring是有區別的,在這個方法里,一個中文漢字相當於佔2個英文字符的位置。而且根據方法傳入的參數pStart和pEnd在返回相應的子字符串child
如果pstart剛好在某個漢字的前半部分,則child應包含該漢字,在後部分則不含。與之相對應的是pEnd如果在某個漢字的後半部分,則child應含該漢字,否則不包含,如果pStart超出pStr的長度(這裡一個漢字長度算2),則返回空,其他性質和JDK的性質形同。
如果覺得我的理解不錯,且看下面的代碼:
public class Test{
public Test(){
String str=”ABCDE”;
String str2=”ABC你D”;
String str3=”A你B好C嗎勇DE”;
System.out.println(“1 str=’ABCDE’ start=1 end=5 結果:”+getSubString(str,1,5));
System.out.println(“2 str=’ABCDE’ start=1 end=4 結果:”+getSubString(str,1,4));
System.out.println(“3 str=’ABCDE’ start=2 end=4 結果:”+getSubString(str,2,4));
System.out.println(“4 str=’ABCDE’ start=6 end=7 結果:”+getSubString(str,6,7));
System.out.println(“5 str=’ABCDE’ start=5 end=5 結果:”+getSubString(str,5,5));
System.out.println(“6 str2=’ABC你D’ start=1 end=3 結果:”+getSubString(str2,1,3));
System.out.println(“7 str2=’ABC你D’ start=1 end=4 結果:”+getSubString(str2,1,4));
System.out.println(“8 str2=’ABC你D’ start=1 end=5 結果:”+getSubString(str2,1,5));
System.out.println(“9 str2=’ABC你D’ start=4 end=4 結果:”+getSubString(str2,4,4));
System.out.println(“10 str3=’A你B好C嗎勇DE’ start=9 end=10 結果:”+getSubString(str3,9,10));
}
public static void main(String args[]){
new Test();
}
public String getSubString(String str,int pstart,int pend){
String resu=””;
int beg=0;
int end=0;
int count1=0;
char[] temp=new char[str.length()];
str.getChars(0,str.length(),temp,0);
boolean[] bol=new boolean[str.length()];
for(int i=0;itemp.length;i++){
bol[i]=false;
if((int)temp[i]255){//說明是中文
count1++;
bol[i]=true;
}
}
if(pstartstr.length()+count1){
resu=null;
}
if(pstartpend){
resu=null;
}
if(pstart1){
beg=0;
}else{
beg=pstart-1;
}
if(pendstr.length()+count1){
end=str.length()+count1;
}else{
end=pend;//在substring的末尾一樣
}
//下面開始求應該返回的字符串
if(resu!=null){
if(beg==end){
int count=0;
if(beg==0){
if(bol[0]==true)
resu=null;
else
resu=new String(temp,0,1);
}else{
int len=beg;//zheli
for(int y=0;ylen;y++){//表示他前面是否有中文,不管自己
if(bol[y]==true)
count++;
len–;//想明白為什麼len–
}
//for循環運行完畢後,len的值就代表在正常字符串中,目標beg的上一字符的索引值
if(count==0){//說明前面沒有中文
if((int)temp[beg]255)//說明自己是中文
resu=null;//返回空
else
resu=new String(temp,beg,1);
}else{//前面有中文,那麼一個中文應與2個字符相對
if((int)temp[len+1]255)//說明自己是中文
resu=null;//返回空
else
resu=new String(temp,len+1,1);
}
}
}else{//下面是正常情況下的比較
int temSt=beg;
int temEd=end-1;//這裡減掉一
for(int i=0;itemSt;i++){
if(bol[i]==true)
temSt–;
}//循環完畢後temSt表示前字符的正常索引
for(int j=0;jtemEd;j++){
if(bol[j]==true)
temEd–;
}//循環完畢後temEd-1表示最後字符的正常索引
if(bol[temSt]==true)//說明是字符,說明索引本身是漢字的後半部分,那麼應該是不能取的
{
int cont=0;
for(int i=0;i=temSt;i++){
cont++;
if(bol[i]==true)
cont++;
}
if(pstart==cont)//是偶數不應包含,如果pstartcont則要包含
temSt++;//從下一位開始
}
if(bol[temEd]==true){//因為temEd表示substring 的最面參數,此處是一個漢字,下面要確定是否應該含這個漢字
int cont=0;
for(int i=0;i=temEd;i++){
cont++;
if(bol[i]==true)
cont++;
}
if(pendcont)//是漢字的前半部分不應包含
temEd–;//所以只取到前一個
}
if(temSt==temEd){
resu=new String(temp,temSt,1);
}else if(temSttemEd){
resu=null;
}else{
resu=str.substring(temSt,temEd+1);
}
}
}
return resu;//返回結果
}
}
測試結果如圖,並且可以任意修改字符串,保證結果正確。
That’s all !
java怎麼把字符串中的的漢字取出來
1.判斷字符串是否全是漢字。
String str1 = “java判斷是否為漢字”
String str2 = “全為漢字”
String reg = “[\\u4e00-\\u9fa5]+”
boolean result1 = str1.matches(reg)//false
boolean result2 = str2.matches(reg)//true
2.提取字符串中的漢字。
String str = “java怎麼把asdasd字符串中的asdasd的漢字取出來”
String reg = “[^\u4e00-\u9fa5]”
str = str.replaceAll(reg, ” “)
System.out.println(str)
3.判斷字符串中是否含有漢字。
boolean result = (str.length() == str.getBytes().length)//true:無漢字 false:有漢字
4.獲取字符串中漢字的個數。
int count = 0
String reg = “[\\u4e00-\\u9fa5]”
String str = “java獲取漢字Chinese的個數”
Pattern p = Pattern.compile(reg)
Matcher m = p.matcher(str)
while (m.find()) {for (int i = 0; i = m.groupCount(); i++) {count = count + 1}}
System.out.println(“共有漢字 ” + count + “個 “)
java語言中如何獲取字符串中漢字的個數
【實例描述】
字符串中可以包含數字,字母、漢字或者其他字符。使用Character類的isDigit()方法可以判斷字符中的某個字符是否為數字,使用Character類的isLetter()方法可以判斷字符中的某個字符是否為字母。實例中將介紹一種方法用來判斷字符串中的某個字符是否為漢字,通過此方法可以計算字符串中漢字的數量。實例的運行效果如圖4.24所示。
【實現過程】
在Eclipse中新建項目ChineseCharacter,並在其中創建一個ChineseCharacter.java文件。在該類的主方法中創建標準輸入流的掃描器對象,接收用戶輸入的字符串。我們在程序中使用matches()方法來統計該字符串中漢字的個數。核心代碼如下所示:
protectedvoiddo_button_actionPerformed(ActionEvente){Stringtext=chineseArea.getText();//獲取用戶輸入intamount=0;//創建漢字數量計數器for(inti=0;itext.length();i++){//遍歷字符串每一個字符//使用正則表達式判斷字符是否屬於漢字編碼booleanmatches=Pattern.matches(“^[\u4E00-\u9FA5]{0,}$”,””+text.charAt(i));if(matches){//如果是漢字amount++;//累加計數器}}umField.setText(amount+””);//在文本框顯示漢字數量}
【代碼解析】
本實例的關鍵點在於正則表達式的使用。Java提供了Pattern用於正則表達式的編譯表示形式,該類提供的靜態方法matches()可以執行正則表達式的匹配。該方法編譯給定正則表達式並嘗試給定輸入與其匹配。如果要匹配的字符序列與正則表達式匹配則返回true,否則返回false。其聲明語法如下:
publicstaticbooleanmatches(Stringregex,CharSequenceinput);【知識擴展】
使用正則表達式可以方便地進行字符串操作,正則表達式經常被用來驗證用戶輸入的信息,如可以判斷用戶輸入的格式是否正確。本實例中使用正則表達式來判斷用戶輸入的字符串是否為漢字,如果為漢字則計數器加1,最後得到字符串中所有漢字的數量。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/193640.html