java判斷是否是中文字元

來源:互聯網
上載者:User

public class StringUtil {
 
 /**
  * 判斷是否為中文字元
  * @param c
  * @return
  */
 private static boolean isChinese(char c) {
  // GENERAL_PUNCTUATION 判斷中文的“號
  // CJK_SYMBOLS_AND_PUNCTUATION 判斷中文的。號
  // HALFWIDTH_AND_FULLWIDTH_FORMS 判斷中文的,號
  Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
  if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
    || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
    || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
    || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
    || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
    || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
   return true;
  }
  return false;
 }
 
 /**
  * 轉換成AS400字元數組
  * @param srcStr
  * @param len
  * @return
  */
 private static  char[] getAS400Char(String srcStr,int len) {
  char[] charArray = srcStr.toCharArray();
  int dbLength = 0 ;
  boolean start = false ;  // 中文開始
  boolean end = false ;  // 中文結束
  boolean duration = false ;  // 中文持續
  int charLength = 0 ;
  for (int i = 0; i < charArray.length; i++) {
   // 判斷是否是中文字元
   if (isChinese(charArray[i])) {
    if(duration)
     start = false ;
    else
     start = true ;
    duration = true ;
    end = false ;
    dbLength ++ ;  // 中文字元本身就應當比一般字元多一位
   }
   else if(duration){  // 遇到非中文字元時,如果已經開始中文,那麼結束
    end = true ;
   }
   dbLength ++ ;  // 無論如何佔一位長度
   //如果中文開始,那麼加一位
   if(start){
    dbLength ++ ;
    start = false ;
   }
   // 如果中文結束,加一位
   if(duration && end){
    dbLength ++ ;
    duration = false ;
   }
   // 如果資料庫長度超過限制,那麼退出
   if(dbLength > len)
    break ;
   else if(duration){ // 如果是中文字元中,因為下次無論如何一定會增加一位長度,如果此長度超過,那麼退出
    if((dbLength +1) > len)
     break ;
   }
   charLength ++ ;
  }
  char[] targetArr = new char[charLength] ;
  for(int i = 0 ; i < charLength ; i ++){
   targetArr[i] = charArray[i] ;
  }
  return targetArr ;
 }
 
 /**
  * 擷取指定長度的符合AS400儲存規範的字串
  * @param srcStr
  * @param len
  * @return
  */
 public static String getAS400Str(String srcStr,int len){
  if(srcStr == null)
   return null ;
  
  return String.valueOf(getAS400Char(srcStr, len)) ;

 }
 
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.