网站地图
  
  高级搜索
  首页   技术论坛   博客 派计划   产品中心   资源中心   银弹在线   商城  

 
  本文的标签
EOS (收录2215篇)EOS知识库 (收录445篇)EOSLibrary (收录27篇)
  SOA2007 - SOA实践
我们何时迈向SOA
——SOA在中国的整体发展现状究竟如何?
我们如何迈向SOA
——中国企业如何迈出实施SOA的第一步?
我们应采用何种技术
——SOA国际标准SCA/SDO的具体内涵?
我们还需要何种技能
——SOA将如何改变系统架构设计以及项目管理过程?

把中文作为双字符处理的subString构件


发布时间:2006-08-02 00:00:00 作者:cservice 出处:goComDevCenter 语言:中文 阅读次数:1467
需求:将中文作为两个字符处理,如果遇到结尾是半个中文字符,则按参数处理。

例如:123ac中国 substring(123ac中国,0,6)

可以选择输出为 123ac中,123ac,123ac?



代码如下:

import org.w3c.dom.*;

import java.io.UnsupportedEncodingException;

import java.util.regex.*;

import com.primeton.tp.common.logger.Logger;

import com.primeton.tp.core.api.BizContext;

import com.primeton.business.bncommon.bizlet.util.BNXmlUtil;

/**

* @author 王文杰

* @version 1.0

* @date 2006-6-27

* @class_displayName String_exp

*/



public class String_exp {



/**

* 取子字符串操作(中文算两个字节)

* @param doc type: Document, DOM;

* @param param type: BizContext;

* @return: int ,运算逻辑返回值,如果失败返回0,成功返回1

* @throws Exception

*



* ** bizlet 的显示名称 **

* @bizlet_displayName BL_subString_byte

* @canExport true

* @bizlet_param passing="in_out" type="field" value="/" name="" desc="存放Substring得到的子串"

* @bizlet_param passing="in_out" type="constant" value="/" name="" desc="原始字符串(可以是变量)"

* @bizlet_param passing="in_out" type="constant" value="/" name="" desc="整数,子串的开始位置,从零开始"

* @bizlet_param passing="in_out" type="constant" value="/" name="" desc="整数,子串的长度"

* @bizlet_param passing="in_out" type="constant" value="/" name="" desc="半个中文字符的处理方式,分三种,参数可以是-1(忽略半个字符)0(不做处理)1(取全中文字符)"

*/

public static int BL_subString_byte(Document doc, BizContext param) throws Exception{

int start,end,newEnd;

Node result = (Node)param.getParaObjectAt(0);

String source = (String)param.getParaObjectAt(1);

String startString = (String)param.getParaObjectAt(2);

String endString = "0";

String halfFlag = "0";

try{

if (param.getLength() >= 4) {//判断是否存在第四个参数

endString = (String) param.getParaObjectAt(3);

}

if (param.getLength() >= 5) {//判断是否存在第五个参数

halfFlag = (String) param.getParaObjectAt(4);

//判断参数是否正确

if(halfFlag.equals("0")==false&&halfFlag.equals("1")==false&&halfFlag.equals("-1")==false)

return -2;

}

start = Integer.parseInt(startString);

if (endString.equals("0")) {

end = source.length();

} else {

end = Integer.parseInt(endString);

}



Logger.debug("start:"+start);

Logger.debug("end:"+end);

//将字符写入字节

byte[] bytesGB2312 = source.getBytes("GB2312");

if (start < 0 || start > end || end > bytesGB2312.length)

return -1;

//根据半中文处理方式取中止字符位数

newEnd=findChinese(source,end,halfFlag);

String rltString = new String(bytesGB2312,start,newEnd, "GB2312");

BNXmlUtil.setNodeValue(result, rltString);

}

catch(Exception e){

Logger.error("BNString:BL_subString error!"+e.getMessage());

return -2;

}

return 1;

}

// 方法根据半中文处理方式取中止字符位数

public static int findChinese(String source,int in_end,String in_half) throws UnsupportedEncodingException{



int end = in_end;

int half = Integer.parseInt(in_half);

int j = 0;

byte[] bytesGB2312 = source.getBytes("GB2312");



for(int i=end-1;i>=0;i--){

System.out.println(bytesGB2312[i]);

if(bytesGB2312[i]<0||bytesGB2312[i]>127)

{j++;

}

else{

//遇到非中文字符终止循环

if(j%2!=0)

end = end + half;

break;

}

//数组顶部

if(i==0){

if(j%2!=0)

end = end + half;

}

}

return end;



}

}

 评论 查看全部评论
 
文网文 于 2007-06-20
请在此处输入评论内容

 

声明:本栏目转载文字、造型、样式、图形及程序如有来自网络,版权归原作者或首发媒体所有,欢迎任何个人访问或者转载,若有作者及出处有误,请来信说明,我们将及时更正。