Can we use String.format() to pad/prefix with a character with desired length?

后端 未结 5 716
广开言路
广开言路 2021-01-04 10:13

Can java.lang.String.format(String str, String str1) be used for adding prefix of a particular character.

I could do this for a number like:



        
相关标签:
5条回答
  • 2021-01-04 10:36

    You can do as below if you really want to use String.format,

    String sendID = "AABB";
    String.format("%32s", sendID ).replace(' ', '0')
    

    Other than String.format you can find many solutions here.

    Edit: Thanks for Brian to point of the issue. The above wont work for input with spaces. You can try as below. But I wont suggest the below operation as it has too many string operation.

    String sendID = "AA BB";
    String suffix = String.format("%32s", "").replace(' ', '0') + sendID;
    sendID = suffix.substring(sendID.length());
    

    You can also try using StringUtils.leftPad

    StringUtils.leftPad(sendID, 32 - sendID.length(), '0');
    
    0 讨论(0)
  • 2021-01-04 10:38

    This is how I solved this issue using the base jdks String.format function

    String sendId="AABB";
    int length=20;
    String.format("%"+length+"s",sendId).replaceAll(" ","0")
    
    0 讨论(0)
  • 2021-01-04 10:42

    You can't use String.format() for padding with arbitrary characters. Perhaps Apache Commons StringUtils.leftPad() would be of use for a concise solution ? Note there's also a StringUtils.rightPad() too.

    0 讨论(0)
  • 2021-01-04 10:44

    I just add some Java 8 code if someone need it in future:

    public class App {
        public static void main(String[] args) {
            System.out.println(leftpad("m m", 2, '@'));
            System.out.println(leftpad("m m", 5, '@'));
        }
    
        static String leftpad(String s, int nb, char pad) {
            return Optional.of(nb - s.length())
                    .filter(i -> i > 0)
                    .map(i-> String.format("%" + i + "s", "").replace(" ", pad + "") + s)
                    .orElse(s);
        }
    
    }
    

    This version supports adding any char as padding

    0 讨论(0)
  • 2021-01-04 10:56

    You can use this hackish way to get your output:

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

    Demo: http://ideone.com/UNVjqS

    0 讨论(0)
提交回复
热议问题