J2ME中的中英文混排
知道了问题的所在,咱们就给他改进改进。先按英文拆分,然后在按中文拆分。下面是我的代码,欢迎和大家一起探讨。
package org.midi.j2me.component;
import java.util.Vector;
import javax.microedition.lcdui.Font;
/**
* <p>模块功能:中英文字符串混排<p>
* 经过三个步骤,
* 先按单词+每行宽度拆分;
* 这时中文会被当成一个长的英文单词,
* 所以,接下来按照每行宽度,再进行拆分
* 声明:程序中部分代码取自isoj2me
* 我的msn:该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。
* 欢迎大家与我交流
* <p>License: Lesser GPL (http://www.gnu.org)</p>
* @author midi 2007-8-31 下午04:10:47
* @version 0.1
* @since 2007
*
*/
public class Dialogue ...{
/**
* 第一步:按分隔符来拆分字符串
*
* @param input
* 源字符串
* @param separator
* 分隔符
* @return
*/
public Vector tokenizeString(String input, String separator) ...{
Vector list = new Vector();
StringBuffer tempString = new StringBuffer();
for (int i = 0; i < input.length(); i++) ...{
if (input.charAt(i) != separator.charAt(0)) ...{
tempString.append(input.charAt(i));
} else ...{
tempString.append(input.charAt(i));
String newString = tempString.toString();
list.addElement(newString);
tempString.delete(0, tempString.length());
}
}
String newString = tempString.toString();
list.addElement(newString);
return list;
}
/**
* 第二步:根据字体宽度按每行的显示宽度拆分
*
* @param input
* 第一步拆分后的字符串
* @param width
* 每行的显示宽度
* @param font
* 字体
* @return
*/
public Vector divideString(String input, int width, Font font) ...{
Vector list = new Vector();
StringBuffer tempString = new StringBuffer("");
if (input.length() < width) ...{
list.addElement(input);
return list;
}
Vector words = this.tokenizeString(input, " ");
for (int i = 0; i < words.size(); i++) ...{
if (font.stringWidth(tempString.toString() + words.elementAt(i)) < width) ...{
tempString.append((String) words.elementAt(i));
} else ...{
list.addElement(tempString.toString());
tempString.delete(0, tempString.length());
tempString.append((String) words.elementAt(i));
}
}
list.addElement(tempString.toString());
return list;
}
/**
* 第三步:把第二步的结果再拆分,主要是处理中文的换行
*
* @param list
* 第二步的结果
* @param width
* 每行的宽度
* @param font
* 字体
* @return
*/
public Vector divideString(Vector list, int width, Font font) ...{
Vector listRet = new Vector();
for (int i = 0; i < list.size(); i++) ...{
String tempString = (String) list.elementAt(i);
// 已经分割好的
if (font.stringWidth(tempString) <= width) ...{
listRet.addElement(tempString);
} else ...{
StringBuffer sb = new StringBuffer("");
for (int j = 0; j < tempString.length(); j++) ...{
if (font.stringWidth(tempString.charAt(j) + sb.toString()) < width) ...{
sb.append(tempString.charAt(j));
} else ...{
String newString = sb.toString();
listRet.addElement(newString);
sb.delete(0, sb.length());
sb.append(tempString.charAt(j));
}
}
String newString = sb.toString();
listRet.addElement(newString);
}
}
return listRet;
}
}
转自:http://blog.csdn.net/midi13/archive/2007/08/31/1766947.aspx