package com.kaixin.android.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import android.graphics.Bitmap;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ImageSpan;
import com.kaixin.android.KXApplication;
/**
* 文字工具类
*
* @author gyz
*
*/
public class TextUtil {
private KXApplication mKxApplication;
public TextUtil(KXApplication application) {
mKxApplication = application;
}
/**
* 根据输入流转换成字符串
*
* @param inputStream
* 文字输入流
* @return 文字字符串(String 类型)
*/
public String readTextFile(InputStream inputStream) {
String readedStr = "";
BufferedReader br;
try {
br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String tmp;
while ((tmp = br.readLine()) != null) {
readedStr += tmp;
}
br.close();
inputStream.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return readedStr;
}
/**
* 表情的正则表达式
*
* @return
*/
private Pattern buildPattern() {
StringBuilder patternString = new StringBuilder(
mKxApplication.mFacesText.size() * 3);
patternString.append('(');
for (int i = 0; i < mKxApplication.mFacesText.size(); i++) {
String s = mKxApplication.mFacesText.get(i);
patternString.append(Pattern.quote(s));
patternString.append('|');
}
patternString.replace(patternString.length() - 1,
patternString.length(), ")");
return Pattern.compile(patternString.toString());
}
/**
* 将文本中含有表情字符的内容换成带有表情图片的文本
*
* @param text
* 带有表情字符的文本
* @return 带有表情图片的文本
*/
public CharSequence replace(CharSequence text) {
try {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
Pattern pattern = buildPattern();
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
Bitmap bitmap = mKxApplication
.getFaceBitmap(mKxApplication.mFacesText
.indexOf(matcher.group()));
if (bitmap != null) {
ImageSpan span = new ImageSpan(bitmap);
builder.setSpan(span, matcher.start(), matcher.end(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
return builder;
} catch (Exception e) {
return text;
}
}
public String getCharacterPinYin(char c) {
HanyuPinyinOutputFormat format = null;
format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
String[] pinyin = null;
try {
pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
// 如果c不是汉字,toHanyuPinyinStringArray会返回null
if (pinyin == null)
return null;
// 只取一个发音,如果是多音字,仅取第一个发音
return pinyin[0];
}
public String getBlueString(CharSequence text) {
text = "<font color=blue>"+ text +"</font>";
return text.toString();
}
/**
* 获取字符的拼音
*
* @param str
* @return
*/
public String getStringPinYin(String str) {
StringBuilder sb = new StringBuilder();
String tempPinyin = null;
for (int i = 0; i < str.length(); ++i) {
tempPinyin = getCharacterPinYin(str.charAt(i));
if (tempPinyin == null) {
// 如果str.charAt(i)非汉字,则保持原样
sb.append(str.charAt(i));
} else {
sb.append(tempPinyin);
}
}
return sb.toString();
}
}