题目:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC在DEF",6,应该输出为"我ABC"而不是"我ABC+'在'字的一半"。我先发一下自己的代码吧,如下:
==================我 是 性 感 的 分 界 线========================
public class SplitString
{
public String myStringSplit(String SplitStr,int SplitByte)
{
StringBuffer sb=new StringBuffer("");
for(int i=0;i<SplitByte;i++)
{
int ch=SplitStr.charAt(i);
if(ch>0&&ch<255)
sb.append((char)ch);
else
{//如果是汉字
sb.append((char)ch);
SplitByte--;
}
}
return (sb.toString()).substring(0, SplitByte);
}
public static void main(String[] args)
{
String str="我ABC在DEF";
SplitString splitString = new SplitString();
System.out.println(splitString.myStringSplit(str,4));
System.out.println(splitString.myStringSplit(str,6));
}
}==================我 是 性 感 的 分 界 线========================
欢迎大家拍砖!!!
==================我 是 性 感 的 分 界 线========================
public class SplitString
{
public String myStringSplit(String SplitStr,int SplitByte)
{
StringBuffer sb=new StringBuffer("");
for(int i=0;i<SplitByte;i++)
{
int ch=SplitStr.charAt(i);
if(ch>0&&ch<255)
sb.append((char)ch);
else
{//如果是汉字
sb.append((char)ch);
SplitByte--;
}
}
return (sb.toString()).substring(0, SplitByte);
}
public static void main(String[] args)
{
String str="我ABC在DEF";
SplitString splitString = new SplitString();
System.out.println(splitString.myStringSplit(str,4));
System.out.println(splitString.myStringSplit(str,6));
}
}==================我 是 性 感 的 分 界 线========================
欢迎大家拍砖!!!
解决方案 »
- java中long型的除法
- 关于swing的一个问题
- showInputDialog上初始一个默认值
- 请教:如何在java程序中调用资源管理器
- c:forEach var="menu" items="${repository.topMenus}"中repository.topMenus是什么意思
- 请问大虾们下面是什么加密算法 是一个邮件系统easymail里面的
- 初学JAVA,哪本书好啊?
- 谈谈对面向对象中“多态”的理解
- 面板重绘问题:在面板中绘一个矩形后,最小画applet按钮后,图就不见了,怎么样才能让它恢复后,图形仍在??
- 请问什么是JSP,TOMCAT?
- JAVA编程思想习题
- 有高手能解释下流(I/O)吗?再给些个例子吧。
{
int d=n,i=0;
while( i<s.length() && (d>1 || d==1 && s.charAt(i)<256) )
{
if(s.charAt(i)<256) d--;
else d-=2;
i++;
}
return s.substring(0,i);
}
若:
System.out.println(split("我A汉BC字D",4));
System.out.println(split("我A汉BC字D",5));
System.out.println(split("我A汉BC字D",12));
则:
我A
我A汉
我A汉BC字D
public String myStringSplit(String SplitStr,int SplitByte)
{
double d = 0.0;
boolean b = false;
for(int i=0;i <SplitByte;i++)
{
if(ch>0&&ch <255)
d += 1.0;
else
d += 0.5;
}
return SplitStr.substring(0,(int)d);
} //不知道可不可以,网吧不能测试了
如果SplitByte大于SplitStr的字符串长度的话,那就会有数组越界的问题了修正函数为public String myStringSplit(String splitStr,int splitByte)
{
int len=splitStr.getBytes().length;
if(len<splitByte)return splitStr; //如果所取大于字符串字节数,直接返回
StringBuffer sb=new StringBuffer("");
for(int i=0;i<splitByte;i++)
{
int ch=splitStr.charAt(i);
if(ch>0&&ch<255)
sb.append((char)ch);
else
{//如果是汉字
sb.append((char)ch);
splitByte--;
}
}
return (sb.toString()).substring(0, splitByte);
}
public String myStringSplit(String splitStr, int splitByte)
{
StringBuffer sb = new StringBuffer("");
int byteLen = 0;
for (int i = 0; i < splitStr.length(); i++)
{
String str = splitStr.substring(i, i + 1);
byteLen += str.getBytes().length;
if (byteLen <= splitByte)
{
sb.append(str);
}
}
return sb.toString();
}
int splitLength = (int) Math.ceil((double)wordLength/2d);
if(splitLength>SplitStr.length()) splitLength = SplitStr.length();
return SplitStr.substring(0, splitLength);
}
if (n <= 0)// 长度小于等于0,返回""
return "";
int count = str.length();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {// 循环字符串
char c = str.charAt(i);
if (c >= 256) {// 非单字符
if ((n -= 2) >= 0)// 如果-2>=0,取字符
sb.append(c);
else
// 否则结束循环
break;
} else if (--n >= 0)
sb.append(c);
else
break;
}
return sb.toString();
}
if (n <= 0)// 长度小于等于0,返回""
return "";
int count = str.length();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {// 循环字符串
char c = str.charAt(i);
if (c >= 256) {// 非单字符
if ((n -= 2) >= 0)// 如果-2>=0,取字符
sb.append(c);
else
// 否则结束循环
break;
} else if (--n >= 0)
sb.append(c);
else
break;
}
return sb.toString();
}