Java 按字节截取带有汉字的字符串的一种做法
Java 按字节截取带有汉字的字符串的解法,网上有不少讨论。这里我也给出一种我自己的处理,基本原理还是统计要截取的字节数中是表示汉字的字节数是否是偶数个,即是否刚好包括了完整的汉字。
/**
* 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
* 按上述规则,输入“我ABC汉DEF 1”,应返回空字符串,而不是“我”。
*/
public class CutMultibyte {
public static String cutMultibyte(String splitStr, int extract) {
byte[] bytes = splitStr.getBytes();
//截取字节数不小于原始字节数时直接返回原字符串。注意字节数一定要用 bytes.length,用字符串的 length() 方法返回的是字符数!
if (extract >= bytes.length) {
return splitStr;
}
else {
int result = 0;
int cutLength = 0;
//统计出在要截取的字节中有几个字节是负数
for (int i = 0; i < extract; i++) {
if (bytes[i] < 0) {
cutLength++;
}
}
//若负数字节数是偶数,即要截取的字节数中遇到刚好是若干完整的汉字,则截取字节数不变;否则负数字节数是奇数,表示遇到的不是完整汉字,截取字节数减 1。
if (cutLength % 2 == 0) {
result = extract;
}
else {
result = extract - 1;
}
String substrx = new String(bytes, 0, result);
return substrx;
}
}
public static void main(String args[]) {
String str = args[0];
int num = Integer.valueOf(ar
相关文档:
项目是基于GMT时间的,在系统启动的时候,我们就会调用TimeZone.setDefault(timeZone)将默认时区设为GMT。
后来突然发现,有时用户选择的时间经过后台一圈后回产生8个小时误差。又是间歇性的,要他重现的时候又偏不来。苦心debug,终于发现在部分线程中,时区还是GMT+8,后台某个调用可能把时区 ......
PROCEDURE user_Login (
i_AuthID IN user_UserPass.UserID%TYPE, --用户代码
i_FunctionCode IN &n ......
Java泛型
由C++的模板函数引入自定义泛型
如下函数的结构很相似,仅类型不同:
int add(int x, int y) { return x + y;}
float add(float x, float y) { return x + y;}
double add(double x ,double y) {return x + y;}
C++用模板函数解决,只写一个通用方法,它可以适应各种类型,示意代码如下:
T add(T x, T y) ......
转自其他网站
核心提示:第一步
充分理解Socket 1.
什么是socket
所谓socket
通常也称作套接字,用于描述IP
地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网...
推广和普及Java
技术,为国内众多的Java
爱好者提供一个“
平等自由协作创造”
的开放式交流环境,提供Java
专题 ......
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体" ......