java 判断以中文开始_java判断是否是中文字符

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)) ;

}   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值