游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2158|回复: 0

[技术分享]字符串分割技术(高效精确)

[复制链接]

6

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2007-7-10 20:56:00 | 显示全部楼层 |阅读模式
用法:参数定义:str——要分割的字符串
                        font——字体
                        rowMaxW——分割后每行宽度
         支持标示符:
         \n    换行
         \t     插入两个汉字长度的空格

public static final String[] clipString(String str,Font font,int rowMaxW){
  if(str == null)
   return null;
  if(rowMaxW < font.charWidth('哈'))
   rowMaxW = font.charWidth('哈');         
  int strID = 0;
  int rowW = 0;
  Vector strManager = new Vector();
  char ch = ' ';
  while(str.length() > strID){
   ch = str.charAt(strID);
   switch(ch)
   {
   case '\n':
    strManager.addElement(str.substring(0,strID));
    str = str.substring(strID+1);
    rowW = 0;
    strID = 0;
    break;
   case '\t':
    StringBuffer sb = new StringBuffer(str);
    sb.deleteCharAt(strID);
    sb.insert(strID,"       ");
    str = sb.toString();
    break;
   default:
    if(rowW + font.charWidth(ch) > rowMaxW){
     strManager.addElement(str.substring(0,strID));
     str = str.substring(strID);
     rowW = 0;
     strID = 0;
    }else{
     rowW += font.charWidth(ch);
     strID++;
    }
   }
  }
  strManager.addElement(str);
  String[] o_Str = new String[strManager.size()];
  strManager.copyInto(o_Str);
  return o_Str;
}



返回结果是一个已切割好的String数组,只要用一个循环打印出来就可以了
public static final void drawClipString(Graphics g,String[] clipStr,Font font,int color,int x,int y){
  if(clipStr == null){
     System.out.println("drawClipString");
     return;
  }
  int FONTH = font.getHeight();
  g.setFont(font);
  g.setColor(color);
  for(int i=0;i<clipStr.length;i++)
     g.drawString(clipStr[ i ],x,y+i*FONTH,0);
}

参数定义:clipStr——先前分割好的字符串数组
               font——字体
               color——颜色
               x,y——打印的屏幕位置

注意,切割和打印函数的字体参数必须保持一致!
另外打个广告:欢迎加入J2ME专业技术群42800413,新手达人不限,因为本人以帮助新人解决疑难和与高手探讨技术为生活乐趣!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 20:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表