黑马程序员技术交流社区
标题:
求解:简化算法,字符串的输出
[打印本页]
作者:
小丑的媳妇2
时间:
2013-3-8 11:55
标题:
求解:简化算法,字符串的输出
一道有趣的面试编程
题目如下:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,
如再输入“我ABC汉DEF”,6,应该输出为“我ABC” 而不是“我ABC+汉的半个”。
我大概前后编译运行了7次 找到了一种完整的实现方式
代码如下:
package test;
class SplitString
{
String SplitStr;
int SplitByte;
public SplitString(String str,int bytes)
{
SplitStr=str;
SplitByte=bytes;
System.out.println(“The String is:’”+SplitStr+”‘;SplitBytes=”+SplitByte);
}
public void SplitIt()
{
int loopCount;
loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte)SplitStr.length()/Split
Byte+1);
System.out.println(“Will Split into “+loopCount);
for (int i=1;i<=loopCount ;i++ )
{
if (i==loopCount){
System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
} else {
System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
}
}
}
public static void main(String[] args)
{
SplitString ss = new SplitString(“test中dd文dsaf朱荣宁3443n荣宁43朱荣宁
0ewldfls=103″,4);
ss.SplitIt();
}
}
细心的高手会发现,这种实现方式的定义没有什么技术含量,而且时间复杂度很高,
希望路过的高手能给出空间复杂度和时间复杂度都很合适的算法,多谢!等待中.......
作者:
scott0610
时间:
2013-3-8 12:01
public static void main(String[] args)throws Exception {
//定义一个字符串并初始化
String str = "abc中国13";
//获取需要截取的长度
int num = subStr(str.getBytes("GBK"), 7);
//开始截取字符串
String resultStr=str.substring(0, num);
System.out.println(resultStr);
}
/**
* 计算需要截取字符串的长度(主要判断对中文的处理)
* @param buf
* @param n
* @return
*/
public static int subStr(byte[] buf, int length) {
int num = 0;
boolean bChineseFirstHalf = false;
for (int i = 0; i < length; i++) {
if (buf[i] < 0 && !bChineseFirstHalf) {
bChineseFirstHalf = true;
} else {
num++;
bChineseFirstHalf = false;
}
}
return num;
}
作者:
陈圳
时间:
2013-3-8 12:44
class Test2
{
public static void main(String[] args)
{
String s2=getStr("我ABC你CDF他DEF",8);
System.out.println("s2="+s2);
}
public static String getStr(String str,int n)//我计算的是包含n,也就是0-n这个随意了...
{
String s="";
int count=0;
if(n<=str.length())
s=str.substring(0,n);
char[] arr=s.toCharArray();
for(char c:arr)
{ if(c<=32||c>=127)//判断这个字符在不在ASCII码表中,如果有不在的.就说明是汉字
count++;
}
s=s.substring(0,n-count);
return s;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2