String.format - 用点填充字符串

时间:2016-04-08 12:05:52

标签: java string string-formatting

我有两个字符串。

String a = "Abraham"
String b = "Best Friend"

我想要一个与此类似的输出:

Abraham.......OK
Best Friend...OK

我使用String.format()来获得以下结果。

a = String.format("%0$-" + b.lenght() + "s   ", a);
b = String.format("%0$-" + b.lenght() + "s   ", b);

Abraham       OK
Best Friend   OK

我不能使用String.replace(),因为“Best”和“Friend”之间的空格也会被替换。

我找到了一个解决方案,可以在字符串的开头放置零。但是,我不明白我应该以哪种方式修改此解决方案以获得所需的输出。

answer by anubhava

String sendID = "AABB";
String output = String.format("%0"+(32-sendID.length())+"d%s", 0, sendID);

我找到了填充字符串的解决方案,但我想用String.format() - Method来解决这个问题。

4 个答案:

答案 0 :(得分:3)

您可以使用if (!(Member::currentUserID() == $Value_of_MemberID_Field )) { $gridfieldConfig->removeComponentsByType('GridFieldDeleteAction') ->removeComponentsByType('GridFieldEditButton'); // add a view button $gridfieldConfig ->addComponent(new GridFieldViewButton()); } 这样的正则表达式:

replaceAll()

输出:

import java.util.*;
import java.lang.*;
import java.io.*;

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        String arr[] = {"Abraham", "Best Friend"};
        for(String s:arr)
            System.out.println(String.format("%-"+32+"s", s).replaceAll("\\s(?=\\s+$|$)", ".")+"OK");
    }
}

http://ideone.com/Rb886w

答案 1 :(得分:2)

我可能会使用循环(以及StringBuilder出于性能原因:

public String pad(String source, int targetLength, String pad) {
  StringBuilder result = new StringBuilder( source );
  for( int i = source.length(); i < targetLength; i+=pad.length() ) {
    result.append(pad);
  }
  return result.toString();
}

//calling:
a = pad( a, 32, "." );

请注意,如果targetLength - source.length()不是pad.length()的倍数,则会提前停止。要修复此问题,要么只传递单个字符,要么使用具有适当值的pad.substring(...)来处理最后一部分。

编辑:

以下是pad.subString(...)的版本:

public String pad(String source, int targetLength, String pad) {
  StringBuilder result = new StringBuilder( source );    
  while( result.length() < targetLength ) {
    result.append(pad.substring( 0, Math.min( pad.length(), targetLength -  result.length() ) ));
  }
  return result.toString();
}

答案 2 :(得分:1)

一个简单的递归方法来做:

public static String fill(String s, int l){
    if(s.length()==l)
        return s; // Return the String , as the task is complete
    else 
        return fill(s+".",l); // Append 1 .(dot) and again call the method
}

这是我能想到的最简单方式。

所以,对你而言,它将是:

a = fill(a,b.length());
b = fill(b,b.length());

答案 3 :(得分:0)

只是一个想法..

public class Test {
  public static void main(String[] args) {
    String TEN_DOTS = "..........";
    String TEST_STR = "foo";
    String outstr = TEST_STR + TEN_DOTS;
    System.out.println(outstr.substring(0,10));
  }
}

输出:

foo.......