Java字符串补齐

super_loverax 2013-07-09 04:40:17
有没有更简单快速的方法将字符串补齐,比如我计算一个字符串的长度,然后和默认长度进行比较,差多少就高位补齐,比如全部补0.有更快的方法吗?除了循环。

public String transeferStr(String orgin)
{
int poslength = 30;
int length = orgin.length();
int remaining = poslength - length;
if(remaining > 0)
{
StringBuilder sb = new StringBuilder();
for(int i = 0;i < remaining ;i++)
{
sb .append(0);
}
sb.append(orgin);
return sb.toString();
}
return orgin.toString();
}

觉得上面的做法很别扭 有更简单的方法没。
...全文
3548 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2013-07-10
  • 打赏
  • 举报
回复
System.arraycopy(originalChars, 0, chars, remaining, length)
shine333 2013-07-10
  • 打赏
  • 举报
回复
恩,第三方库。commons-lang,一般我是建议所有所有项目都用的。即使一些手机应用,也应该考虑。 另外,如果只是拼0的话还可以考虑(手写,可能有小bug)

...
if(remaining > 0) {
  char[] originalChars = origin.toCharArray();
  char[] chars = new char[poslength];
  Arrays.fill(chars, 0, remaining, '0'); // 当然这里也是循环
  System.arraycopy(originalChars, 0, chars, 0, length); // 当然这里也涉及循环,但这里不是Java层面的循环,而是底层的指令,速度比较快
  return new String(chars);
}
return orgin; // 没必要toString
...
liuzuowei007 2013-07-10
  • 打赏
  • 举报
回复

String addStr = "000000000000000";
		String srt = "awrawrawr";
		
		String result = addStr+srt;
		int length = result.length();
		System.out.println(result.substring(length-15,length));
这样呢?
lkq_david 2013-07-10
  • 打赏
  • 举报
回复
定义一个和你要比较的字符串一样长的"0",然后把你在字符串覆盖前面一部分就行了
huntor 2013-07-09
  • 打赏
  • 举报
回复
第三方库还可以使用Google Guava: com.google.common.base.Strings.padStart("2010", 3, '0') returns "2010"
  • 打赏
  • 举报
回复
引用 6 楼 super_loverax 的回复:
递归的效率比较差,家不如直接循环呢,还是不建议用额。呵呵,不过还是感谢。 [quote=引用 5 楼 hjw506848887 的回复:] [quote=引用 楼主 super_loverax 的回复:] 有没有更简单快速的方法将字符串补齐,比如我计算一个字符串的长度,然后和默认长度进行比较,差多少就高位补齐,比如全部补0.有更快的方法吗?除了循环。

public String transeferStr(String orgin)
{
int poslength = 30;
int length = orgin.length();
int remaining = poslength  - length;
if(remaining > 0)
{
StringBuilder sb = new StringBuilder();
for(int i = 0;i < remaining ;i++)
{
sb .append(0);
}
sb.append(orgin);
return sb.toString();
}
return orgin.toString();
}
觉得上面的做法很别扭 有更简单的方法没。
用递归。。。。。。
public class StringTest {
	public static String str = "123456789";
	private static int length = 20;
	
	public static void addStrLength(){
		if(str.length() == length)
			return;
		str += 0;
		addStrLength();
	}
	public static void main(String[] args) {
		addStrLength();
		System.out.println(str);
	}
}
[/quote][/quote]我光看到你不想用循环了,所以没考虑性能问题,就直接想到了递归,嘿嘿嘿。。。不过就是用的第三方库,它内部实现,也是循环的,或者是用正则,只是封装在StringUtils类里面,对于快速不快速还不好说,不过代码量少了很多,写起来方便了。。。。。。我倒是更赞成四楼的方法。。。。。。
super_loverax 2013-07-09
  • 打赏
  • 举报
回复
二楼的方法看似还不错。唯一不好的就是引入了第三方的类库。呵呵,感谢!
super_loverax 2013-07-09
  • 打赏
  • 举报
回复
递归的效率比较差,家不如直接循环呢,还是不建议用额。呵呵,不过还是感谢。
引用 5 楼 hjw506848887 的回复:
[quote=引用 楼主 super_loverax 的回复:] 有没有更简单快速的方法将字符串补齐,比如我计算一个字符串的长度,然后和默认长度进行比较,差多少就高位补齐,比如全部补0.有更快的方法吗?除了循环。

public String transeferStr(String orgin)
{
int poslength = 30;
int length = orgin.length();
int remaining = poslength  - length;
if(remaining > 0)
{
StringBuilder sb = new StringBuilder();
for(int i = 0;i < remaining ;i++)
{
sb .append(0);
}
sb.append(orgin);
return sb.toString();
}
return orgin.toString();
}
觉得上面的做法很别扭 有更简单的方法没。
用递归。。。。。。
public class StringTest {
	public static String str = "123456789";
	private static int length = 20;
	
	public static void addStrLength(){
		if(str.length() == length)
			return;
		str += 0;
		addStrLength();
	}
	public static void main(String[] args) {
		addStrLength();
		System.out.println(str);
	}
}
[/quote]
  • 打赏
  • 举报
回复
引用 楼主 super_loverax 的回复:
有没有更简单快速的方法将字符串补齐,比如我计算一个字符串的长度,然后和默认长度进行比较,差多少就高位补齐,比如全部补0.有更快的方法吗?除了循环。

public String transeferStr(String orgin)
{
int poslength = 30;
int length = orgin.length();
int remaining = poslength  - length;
if(remaining > 0)
{
StringBuilder sb = new StringBuilder();
for(int i = 0;i < remaining ;i++)
{
sb .append(0);
}
sb.append(orgin);
return sb.toString();
}
return orgin.toString();
}
觉得上面的做法很别扭 有更简单的方法没。
用递归。。。。。。
public class StringTest {
	public static String str = "123456789";
	private static int length = 20;
	
	public static void addStrLength(){
		if(str.length() == length)
			return;
		str += 0;
		addStrLength();
	}
	public static void main(String[] args) {
		addStrLength();
		System.out.println(str);
	}
}
jerrygr_ok 2013-07-09
  • 打赏
  • 举报
回复
二楼的方法挺不好的,apache的那几个工具包挺好使的,不过String类下就有一个格式化的方法:

		String str = "gr";
		String res = String.format("%5s", str);
		res = res.replaceAll("\\s", "1");
		System.out.println(res);//----------结果:111gr
但楼主你还是用二楼提供的方法吧,挺好使的
JohnsonEE 2013-07-09
  • 打赏
  • 举报
回复
2楼无疑是最佳方法,但是如果你只想用jdk里的api的话,我有个方法:
package testPackage;

public class StringTest {
    public static void main(String[] args) {
        //假设必须15位长
        int fullLength = 15;
        //假设输入123456
        StringBuilder input = new StringBuilder("123456");
        //预先定义一个15位0
        StringBuilder zero = new StringBuilder("000000000000000");
        
        String result = zero.substring(0, zero.length() - input.length()) + input;
        
        System.out.println(result);
    }
}
抱抱枯叶 2013-07-09
  • 打赏
  • 举报
回复
更快的可能没有了 不过你可以试试org.apache.commons.lang.StringUtils这个类

String test ="3123123";
String value = StringUtils.leftPad(test, 10, "0");
ystem.out.println(value);
结果就是0003123123
ldq67123 2013-07-09
  • 打赏
  • 举报
回复
一般而言不能再快了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧