11#方法不错,我也写一个: public class SimpleTest{ public static String formatString(String str, int length, String slot){ StringBuffer sb = new StringBuffer(); sb.append(str);
int count = length - str.length();
while(count > 0){ sb.append(slot); count --; }
return sb.toString(); }
public static void main(String[] args) { String str = "abc";
new String(new char[10]).replace((new char[1])[0], ' ') 跟19楼基本类似
我来翻老帖了。总结了楼上的两个方法: public static void main(String[] args) { String g = "Ganky"; long l = System.currentTimeMillis(); formatStr(g,10000000,'0'); System.out.println(System.currentTimeMillis()-l); l = System.currentTimeMillis(); rightPad(g,10000000,'0'); System.out.println(System.currentTimeMillis()-l); }
public static String rightPad(String text, int length, char c) { char[] array = new char[length]; System.arraycopy(text.toCharArray(), 0, array, 0, text.length()); Arrays.fill(array, text.length(), length, c); return new String(array); }
public static String formatStr(String str, int length, char c) { StringBuffer sb = new StringBuffer(str); length = length - str.length(); for(int i=0;i<length;i++) { sb.append(c); } return sb.toString(); }经过简单的测试(1000W长度),rightPad方法效率高出不少,相差近10倍 如果单纯是LZ要求的1000长度的话,基本上没差别(1毫秒以内)
public static String formatStr(String str, int length) { if (str == null) {
return null;
}
int strLen = str.length();
if (strLen == length) {
return str;
} else if (strLen < length) {
int temp = length - strLen;
String tem = "";
for (int i = 0; i < temp; i++) {
tem = tem + " ";
}
return str + tem;
}else{
return str.substring(0,length);
}
}
char[] array = new char[length];
Arrays.fill(array, c);
System.arraycopy(text.toCharArray(), 0, array, 0, text.length());
return new String(array);
}没有做相关参数check
char[] array = new char[length];
Arrays.fill(array, text.length(), length, c);
System.arraycopy(text.toCharArray(), 0, array, 0, text.length());
return new String(array);
}更正一下
你有一个String 1000个空格的String
那你就想用的时候在String前面加你的字符串啊,长度不就是1000吗前面是你的字符串后面是空格啊,不用循环加空格啊,完全可以生成一个1000个空格的String就行啦
public class SimpleTest{
public static String formatString(String str, int length, String slot){
StringBuffer sb = new StringBuffer();
sb.append(str);
int count = length - str.length();
while(count > 0){
sb.append(slot);
count --;
}
return sb.toString();
}
public static void main(String[] args) {
String str = "abc";
System.out.println(formatString(str, 1000, "0"));
}
}
String str="abc";
String result=new String(Arrays.copyOf(str.toCharArray(),30)).replaceAll(""+(char)0," ");
System.out.println(result+"|");这是一个指定是30长度的字符串,可以把30用1000替换掉。注意,如果str长度超过30,将被截为30.
17楼的好
long l = System.currentTimeMillis();
formatString(str, 10000000, "0");//循环1千w次
System.out.println(System.currentTimeMillis()-l);
时间不到1s钟。
char数组自动补的是'a'吧?
public static void main(String[] args) {
String str = "abc";
long t0, t1;
t0 = System.nanoTime();
str = appendSpace(str, 5, false);
t1 = System.nanoTime();
System.out.println("|" + str + "|");
System.out.println((t1 - t0) + " ns");
} private static String appendSpace(String str, int spaceCount, boolean appendHead) {
char[] chs = new char[str.length() + spaceCount];
for(int i = appendHead ? 0 : str.length(), j = 0; j < spaceCount; j++) {
chs[i++] = ' ';
}
System.arraycopy(str.toCharArray(), 0, chs, appendHead ? spaceCount : 0, str.length());
return new String(chs);
}
}
跟19楼基本类似
public static void main(String[] args) {
String g = "Ganky";
long l = System.currentTimeMillis();
formatStr(g,10000000,'0');
System.out.println(System.currentTimeMillis()-l);
l = System.currentTimeMillis();
rightPad(g,10000000,'0');
System.out.println(System.currentTimeMillis()-l);
}
public static String rightPad(String text, int length, char c) {
char[] array = new char[length];
System.arraycopy(text.toCharArray(), 0, array, 0, text.length());
Arrays.fill(array, text.length(), length, c);
return new String(array);
}
public static String formatStr(String str, int length, char c) {
StringBuffer sb = new StringBuffer(str);
length = length - str.length();
for(int i=0;i<length;i++) {
sb.append(c);
}
return sb.toString();
}经过简单的测试(1000W长度),rightPad方法效率高出不少,相差近10倍
如果单纯是LZ要求的1000长度的话,基本上没差别(1毫秒以内)
String str = "abc";
str = String.format("%1$-1000s", str);
正负号可以控制空格符是添加到abc之前还是之后
{
public static void main(String agrs[])
{
String ba="abc";
String result_ba="";
result_ba= String.format ("%-1000s", ba);
System.out.println (result_ba);
}}
我知道这是返回一个格式化的字符串。
api中是public static String format(String format,
Object... args)
String是那个基本的字符串,arg貌似是格式?
看不懂啊?