比如: String text = abcd;
现在要 将text变成长度为1MB的 字符串,在abcd前补零.我试过用IF语句 :
protected String addZeroLeft(String str, int length)
{
if(str == null) {
str = "";
}
if(str.length()>length){
str = str.substring(0,length);
}
int iSize = length - str.length();
if(iSize <= 0) {
return str;
}
for(int i = 0; i < iSize; i++) {
str = "0" + str;
}
return str;
}结果效率很低,耗时太长时间才循环完.
而用 java.text.DecimalFormat 却要先给定 1MB的零,也是相当头疼的问题.
问高手有没有类似问题的解决方案. 急~~ 在线等.
现在要 将text变成长度为1MB的 字符串,在abcd前补零.我试过用IF语句 :
protected String addZeroLeft(String str, int length)
{
if(str == null) {
str = "";
}
if(str.length()>length){
str = str.substring(0,length);
}
int iSize = length - str.length();
if(iSize <= 0) {
return str;
}
for(int i = 0; i < iSize; i++) {
str = "0" + str;
}
return str;
}结果效率很低,耗时太长时间才循环完.
而用 java.text.DecimalFormat 却要先给定 1MB的零,也是相当头疼的问题.
问高手有没有类似问题的解决方案. 急~~ 在线等.
解决方案 »
- 关于数据量太大写入文本文件无法开启
- 请教有关计算器界面设计
- 两个计算机,A计算机不停的给B计算机传输 二进制数据。 要用程序实现,怎样才能达到这种要求呢?java.io包中的输入、输出类太多了,不知道选取哪个
- 请教高分高手
- java精英班的测试题?
- java application调用数据库问题
- 散分啦,大家进来,我想问问有关培训的事情!!!!
- 请问A b = new A();的问题?
- 求JSP和JAVA的一些教程或实例,学习!!!
- Cryption的doFinal当使用的是加密模式时,加密后的二进制的数据的长度和什么有关?
- HIBERNATE配置文件中,如何使用sql语句
- 低级ui 高级的设计模式
public static void main(String[] args) {
String str = "abc";
String newStr = addZeroLeft(str, 1024 * 1024);
// 输出最后十位
System.out.println(newStr.substring(1024*1024 - 10));
} public static String addZeroLeft(String str, int length) {
if (str.length() >= length) {
return str;
}
char[] c = new char[length - str.length()];
for (int i = 0, k = c.length; i < k; i++) {
c[i] = '0';
}
return new String(c) + str;
}
}
private void addZero() {
double start = System.currentTimeMillis();
StringBuffer sb = new StringBuffer("");
for(int i = 0; i< 10000; i++){
sb.append("0");
}
double end = System.currentTimeMillis();
System.out.println("Times:"+(end - start));
} public static void main(String[] args) {
new TestZero().addZero();
}
}
控制台:
Times:15.0
li_kewei
ProvidenceZY
bao110908
li_kewei
我这就试试看 ^_^
但是它为什么会慢呢?这主要在于StringBuffer的长度是不定的,在容量不够时需要对数组进行扩容
这样的操作就使效率明显降低了。这个题目由于事先知道长度的,可以使char数组定长,再者类的方法调用总要比操作基本类型数据来得
慢,所以速度就快很多了,我试了一下,运行速度是StringBuffer的十分之一以下!
还有个问题要问一下,给的定长是 length = 1024*1024
但是用sysout.println.out(newStr) 时,看不见 "0000..." 的输出 ,只看见"abcd".
是不是println的长度受限制了呢? 当长度在 1024*31时候 ,"00.."能打出发行,1024*33 时,就打不出了.
为什么呢?
// 输出最后十位
不是用 System.out.println(newStr.substring(1024*1024 - 10));
而是用 Sysout.println.out(newStr) ;
你可以将这个字符串写到文件中就可以看到了。
恩 写到文件中就可以看见了.
吃饭咯,太谢谢拉. 学到不少东西.
修改Console buffer size的值就可以了。
--------在J2SE版上怎么还有个相同的帖子? "
这个我就不知道了.火龙果
你有没有MSN,或是其它联系方式呢.
以后向你提问题 ^_^