求中文字符串的处理问题? 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想String to char[]可以做到 给你一个我前几天刚写好的代码,好用的..package littlebean;import java.util.*;public class DoTxt { public DoTxt() { } /** 获取指定字符串的长度 */ public static int getTxtLen(String txt) { txt=txt.trim(); String bb=null; int txtlen=0; for (int i = 0; i < txt.length(); i++) { bb = txt.substring(i, i+1); //生成一个Pattern,同时编译一个正则表达式 if(java.util.regex.Pattern.matches("[\u4E00-\u9FA5]", bb)){ txtlen=txtlen+2; } else{ txtlen++; } } return txtlen; } /** 截取指定长度的字符串 */ public static String CutTxt(String txt,int aimlen){ int origlen=0; int reallen=0; String aimtxt=null; String bb=null; txt=txt.trim(); origlen=txt.length(); if (origlen>=1){ for(int i=0;i<origlen;i++){ bb = txt.substring(i,i+1); if(java.util.regex.Pattern.matches("[\u4E00-\u9FA5]", bb)){ reallen=reallen+2; } else{ reallen=reallen+1; } if(reallen>=aimlen){ /** 取得是实际的字符,所以不会存在半个字的情况 */ aimtxt = txt.substring(0,i+1); break; } } } else{ aimtxt=""; } return aimtxt; }}实际用法:String txt="我是china人,我爱我的国家";int len=DoTxt.getTxtLen(str);txt=DoTxt.CutTxt(txt,15); 修改一下楼上的 public static String CutTxt(String txt, int aimlen) { int origlen = 0; int reallen = aimlen / 2; String aimtxt = null; String bb = null; txt = txt.trim(); origlen = txt.length(); if (aimlen == 0 || origlen == 0) aimtxt = ""; else if (aimlen >= getTxtLen(txt)) aimtxt = txt; else { for (int i = aimlen / 2; i <= aimlen; i++) { //从所截长度的一半判断到所截长度即可 bb = txt.substring(0, i); reallen = getTxtLen(bb); if (reallen == aimlen) { aimtxt = txt.substring(0, i); break; } else if (reallen > aimlen) { aimtxt = txt.substring(0, i - 1); break; } } } return aimtxt; } 调用静态方法得到的值始终为0 出现这样的错误提示是不是我的环境配置错了???? 随机15个不重复数字的算法 jdk帮助文档 数据库驱动,请大家帮忙看看 在线等待...时间字符转换问题 一个菜鸟问题! 着急请教 强制类型转换 变量赋值的问题 java调oracle过程的出了问题,求助!帮忙看看 怎么在java里解析xml文件 java.net与C socket编程之比较 低版本jre如何才能使用java.nio?
package littlebean;
import java.util.*;
public class DoTxt {
public DoTxt() { }
/** 获取指定字符串的长度 */
public static int getTxtLen(String txt) {
txt=txt.trim();
String bb=null;
int txtlen=0;
for (int i = 0; i < txt.length(); i++) {
bb = txt.substring(i, i+1);
//生成一个Pattern,同时编译一个正则表达式
if(java.util.regex.Pattern.matches("[\u4E00-\u9FA5]", bb)){
txtlen=txtlen+2;
}
else{
txtlen++;
}
}
return txtlen;
}
/** 截取指定长度的字符串 */
public static String CutTxt(String txt,int aimlen){
int origlen=0;
int reallen=0;
String aimtxt=null;
String bb=null;
txt=txt.trim();
origlen=txt.length();
if (origlen>=1){
for(int i=0;i<origlen;i++){
bb = txt.substring(i,i+1);
if(java.util.regex.Pattern.matches("[\u4E00-\u9FA5]", bb)){
reallen=reallen+2;
}
else{
reallen=reallen+1;
}
if(reallen>=aimlen){
/** 取得是实际的字符,所以不会存在半个字的情况 */
aimtxt = txt.substring(0,i+1);
break;
}
}
}
else{
aimtxt="";
}
return aimtxt;
}
}实际用法:
String txt="我是china人,我爱我的国家";
int len=DoTxt.getTxtLen(str);
txt=DoTxt.CutTxt(txt,15);
public static String CutTxt(String txt, int aimlen) {
int origlen = 0;
int reallen = aimlen / 2;
String aimtxt = null;
String bb = null;
txt = txt.trim();
origlen = txt.length();
if (aimlen == 0 || origlen == 0)
aimtxt = "";
else if (aimlen >= getTxtLen(txt))
aimtxt = txt;
else {
for (int i = aimlen / 2; i <= aimlen; i++) {
//从所截长度的一半判断到所截长度即可
bb = txt.substring(0, i);
reallen = getTxtLen(bb);
if (reallen == aimlen) {
aimtxt = txt.substring(0, i);
break;
}
else if (reallen > aimlen) {
aimtxt = txt.substring(0, i - 1);
break;
}
}
}
return aimtxt;
}