編寫一個截取字符串的函數(shù),輸入為一個字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。 但是要保證漢字不被截半個,如“我ABC”4,應(yīng)該截為“我AB”,輸入“我ABC漢DEF”,6,應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個”。
Posted on 2011-04-28 16:31 哈希 閱讀(368) 評論(0) 編輯 收藏 所屬分類: java面試題目:
編寫一個截取字符串的函數(shù),輸入為一個字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。 但是要保證漢字不被截半個,如“我ABC”4,應(yīng)該截為“我AB”,輸入“我ABC漢DEF”,6,應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個”。
- package com.sw.suanfa.first.ten;
- /**
- * 編寫一個截取字符串的函數(shù),輸入為一個字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。
- * 但是要保證漢字不被截半個,
- * 如“我ABC”4,應(yīng)該截為“我AB”,
- * 輸入“我ABC漢DEF”,6,應(yīng)該輸出為“我ABC”而不是“我ABC+漢的半個”。
- * @author songwei
- *
- *我的處理方式:截取字符串的一個字符,加入StringBuffer中,并取其字節(jié)數(shù),并入當前獲取字符的總長度中,
- *如果總長度大于等于輸入的長度,則返回StringBuffer的toString值。
- *getSubString方法傳入encoding值。UTF-8中文占3個字節(jié),GBK占2個。結(jié)果有所不同,所以還是傳入較好。
- *沒有通過判斷charAt的值來判定是否為中文等特殊字符。
- *不知道我這種方式是否正確。【未經(jīng)過詳細測試】
- */
public class SubStringWithChina {
public static void main(String[] args) throws Exception{
String a = "我ABC漢DEF" ;
int len = 6 ;
String encoding = "UTF-8" ;
System.out.println( getSubString(a, len,encoding) );
a = "我ABC";
len = 4 ;
encoding = "gbk" ;
System.out.println( getSubString(a, len,encoding) );
}
/**
*
* @param str 傳入字符串
* @param len 截取字節(jié)數(shù)
* @param encoding 編碼方式
* @return 返回截取后的字符串
* @throws Exception
*/
public static String getSubString(String str,int len,String encoding) throws Exception{
if(str == null || str.length()<1) return null ;
if(len<1) return null ;
StringBuffer sb = new StringBuffer();
int all = 0 ;
for(int i=0;i<str.length();i++){
String tmp = str.substring(i,i+1);
sb.append(tmp);
byte[] tmpB = tmp.getBytes(encoding);
all +=tmpB.length ;
if(all>=len){
break ;
}
}
return sb.toString() ;
}
}
-
判斷字符串中是否含有漢字:
String str = "test中文漢字";
String regEx = "[\\u4e00-\\u9fa5]";/**
* 判斷有沒有中文
*/
if (str.getBytes().length == str.length()) {
System.out.println("無漢字");
} else {
System.out.println("有漢字");
}/**
* 如果有則打印出來
*/
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
while (m.find()) {
System.out.print(m.group(0) + "");
}如題