| J2ME中的中英文混排 |
|
|
|
|
Author: 一滴蔚蓝色 | Date: 2008-06-22 | View: 340
|
开发技术 -
程序设计
| ||||
|
最近在做一个手机电子书的程序。发现按传统的字符串分割方法(即每行可以显示的文字宽度拆分)英文一个单词会被拆分到两行,看着特别不舒服。而纯粹的按照英文单词+每行宽度的条件拆分,遇到有中文又有英文的文章,中文就会连成一长串。 知道了问题的所在,咱们就给他改进改进。先按英文拆分,然后在按中文拆分。下面是我的代码,欢迎和大家一起探讨。 package org.midi.j2me.component; import java.util.Vector; import javax.microedition.lcdui.Font; /** * <p>模块功能:中英文字符串混排<p> * 经过三个步骤, * 先按单词+每行宽度拆分; * 这时中文会被当成一个长的英文单词, * 所以,接下来按照每行宽度,再进行拆分 * 声明:程序中部分代码取自isoj2me * 我的msn:crazyjava@hotmail.com * 欢迎大家与我交流 * <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 本文关键字: J2ME 中英文 混排 阅读数: 341 | 打印 | E-mail
|
||||||||
| (J2ME游戏中的图片处理) < 上一篇 | 下一篇 > (j2me实现j2se的Properties功能) |
|---|