我有一个给定的文件名模板,存储在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个字符之间。
答案 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