设为首页 加入收藏

TOP

Android 中汉字转化为拼音(九)
2014-11-24 12:51:41 来源: 作者: 【 】 浏览:9
Tags:Android 汉字 化为 拼音
if(offsets == null || input == null || TextUtils.isEmpty(input)){
// return empty tokens
return null;
}

StringBuilder subStrSet = new StringBuilder();
ArrayList tokens = new ArrayList();
ArrayList shortSubStrOffset = new ArrayList();
final int inputLength = input.length();
final StringBuilder subString = new StringBuilder();
final StringBuilder subStrOffset = new StringBuilder();
int tokenType = Token.LATIN;
int caseTypePre = DialerSearchToken.FIRSTCASE;
int caseTypeCurr = DialerSearchToken.UPPERCASE;
int mPos = 0;

// Go through the input, create a new token when
// a. Token type changed
// b. Get the Pinyin of current charater.
// c. current character is space.
// d. Token case changed from lower case to upper case,
// e. the first character is always a separated one
// f character == '+' || character == '#' || character == '*' || character == ',' || character == ';'
for (int i = 0; i < inputLength; i++) {
final char character = input.charAt(i);
if (character == '-' || character == ',' ){
mPos++;
} else if (character == ' ') {
if (subString.length() > 0) {
addToken(subString, tokens, tokenType);
addOffsets(subStrOffset, shortSubStrOffset);
}
addSubString(tokens,shortSubStrOffset,subStrSet,offsets);
mPos++;
caseTypePre = DialerSearchToken.FIRSTCASE;
} else if (character < 256) {
if (tokenType != Token.LATIN && subString.length() > 0) {
addToken(subString, tokens, tokenType);
addOffsets(subStrOffset, shortSubStrOffset);
}
caseTypeCurr = (character>='A' && character<='Z') DialerSearchToken.UPPERCASE:DialerSearchToken.LOWERCASE;
if(caseTypePre == DialerSearchToken.LOWERCASE && caseTypeCurr == DialerSearchToken.UPPERCASE){
addToken(subString, tokens, tokenType);
addOffsets(subStrOffset, shortSubStrOffset);
}
caseTypePre = caseTypeCurr;
tokenType = Token.LATIN;
Character c = Character.toUpperCase(character);
if(c != null){
subString.append(c);
subStrOffset.append((char)mPos);
}
mPos++;
} else if (character < FIRST_UNIHAN) {
//Comment out. Do not cover unknown characters SINCE they can not be input.
// if (tokenType != Token.UNKNOWN && subString.length() > 0) {
// addToken(subString, tokens, tokenType);
// addOffsets(subStrOffset, shortSubStrOffset);
// caseTypePre = Token.FIRSTCASE;
// }
// tokenType = Token.UNKNOWN;
// Character c = Character.toUpperCase(character);
// if(c != null){
// subString.append(c);
// subStrOffset.append((char)(mPos));
// }
mPos++;
} else {
Token t = getToken(character);
int tokenSize = t.target.length();
//Current type is PINYIN
if (t.type == Token.PINYIN) {
首页 上一页 6 7 8 9 10 下一页 尾页 9/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇S3C6410硬件DISPLAY CONTROLLER(.. 下一篇Linux高端内存映射(下)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)