Java用带零填充的整数替换字符串中的主题标签

时间:2018-09-24 10:04:40

标签: java string templates replace

我有一个给定的文件名模板,存储在String变量中,例如:"fileno####save.txt"

我在int变量中存储了一个介于1-9999的数字。

如果我的电话号码是2,我想得到:"fileno0002save.txt"

如果我的电话号码是23,我想得到:"fileno0023save.txt"

如果我的电话号码是121,我想得到:"fileno0121save.txt"

如果我的电话号码是2021,我希望获得:"fileno2021save.txt"

让我们用一些不同的模板来查看它:"######fileno.txt"

如果我的电话号码是2,我想得到:"000002fileno.txt"

如果我的电话号码是23,我想得到:"000023fileno.txt"

如果我的电话号码是121,我想得到:"000121fileno.txt"

如果我的电话号码是2021,我希望获得:"002021fileno.txt"

int数字的长度永远不会大于#标签的长度,因此我们不必处理它,因为我已经为此编写了一个例外。我必须处理的字符串中的主题标签部分的长度在2到10个字符之间。

4 个答案:

答案 0 :(得分:1)

对于填充,您可以使用以下内容:

int maxHashes=10;
int myInt = 11;
String lpadPadStr = String.format("%1$" + maxHashes + "s", myInt).replace(' ', '0');

答案 1 :(得分:1)

以下示例是可运行的;使其适应您的需求,例如,将“读取模板”和“应用模板”步骤分开。

import java.util.regex.*;

class Main {
    public static void main(String[] args) {
        Pattern HASHES = Pattern.compile("^(.*?)(#+)(.*)$");

        // read the template
        String pattern = "abc####foo.txt";

        Matcher m = HASHES.matcher(pattern);
        if (!m.matches()) throw new IllegalArgumentException("Invalid template");
        int len = m.group(2).length();
        String prefix = m.group(1);
        String suffix = m.group(3);

        // apply the template
        int input = 12;

        String f = prefix + String.format("%0" + len + "d", input) + suffix;
        System.out.println(f);
    }
} 

答案 2 :(得分:0)

我认为使用正则表达式(RegEx)查找任意数量的#标签是最好的选择。您可以使用群组来分割文字,然后输入数字。

答案 3 :(得分:0)

您可以执行以下操作:

String format = "fileno####save.txt";
int num = 2;

int numberOfHash = format.length() - format.replace("#", "").length();

String hashes = format.substring(format.indexOf("#"), format.indexOf("#") + numberOfHash);

String paddedString = String.format(format.replace(hashes, "%0" + numberOfHash + "d"), num);

System.out.println(paddedString); // fileno0002save.txt