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,后台某个调用可能把时区 ......
转自其他网站
核心提示:第一步
充分理解Socket 1.
什么是socket
所谓socket
通常也称作套接字,用于描述IP
地址和端口,是一个通信链的句柄。应用程序通常通过套接字向网...
推广和普及Java
技术,为国内众多的Java
爱好者提供一个“
平等自由协作创造”
的开放式交流环境,提供Java
专题 ......
闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans、MyEclipse的拖动功能)。
源代码如下:
package ibees.qq;
import java.awt.BorderLayout;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import j ......
Java™语言包含两种内在的同步机制:同步块(或方法)和volatile变量。这两种机制的提出都是为了实现代码线程的安全性。其中volatile变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。在这期的Java理论与实践中,Brian Goetz将介绍几种正确使用volatile变量的模式,并针对其适用性限制提出一 ......