验证并替换id以匹配java中的模式?
我有一个要求,我得到一个字符串,它的开头可能包含也可能不包含验证并替换id以匹配java中的模式?,java,string-formatting,Java,String Formatting,我有一个要求,我得到一个字符串,它的开头可能包含也可能不包含s,然后是数字,可以是1位到5位。现在,这个字符串需要类似于s和5位数字(不能包含另一个字母),如下所示: s1->s00001 s12->s00012 s123->s00123 s1234->s01234 s12345->s12345 因为s可能会出现,也可能不会出现,所以在添加前导零之前,我也需要检查它。 这是我到目前为止得到的结果,但是否有更好的解决方案(可能是使用常规表达式) private String formatSto
s
,然后是数字,可以是1位到5位。现在,这个字符串需要类似于s
和5位数字(不能包含另一个字母),如下所示:
s1->s00001
s12->s00012
s123->s00123
s1234->s01234
s12345->s12345
因为s可能会出现,也可能不会出现,所以在添加前导零之前,我也需要检查它。
这是我到目前为止得到的结果,但是否有更好的解决方案(可能是使用常规表达式)
private String formatStoreNumber(String storeNumber) {
if(storeNumber.contains("s")) {
storeNumber = storeNumber.replace("s", "");
}
storeNumber = StringUtils.leftPad(storeNumber, 5, '0');
storeNumber = "s" + storeNumber;
return storeNumber;
}
您可以尝试以下解决方案:
private static String formatStoreNumber(String storeNumber) {
String strWithoutS = storeNumber.replaceAll("S", "");
String result = "S" + ("00000" + strWithoutS).substring(strWithoutS.length());
return result;
}
以下是输入和各自的输出:
Input : S14666| Output : S14666
Input : 1 | Output : S00001
Input : 12 | Output : S00012
Input : 123 | Output : S00123
Input : 1234 | Output : S01234
Input : 12345 | Output : S12345
一个字符串是否可能包含多个“s”?(因此需要替换多个数字?@markspace不,它不能。为什么要使用正则表达式?下面是另一个更短的方法,仍然不使用正则表达式:
“s”+新的十进制格式(“00000”).format(Integer.parseInt((“s”+storeNumber).split([s]+”[1])
@ernest_k正则表达式是个主意。你能给我解释一下你的代码是如何工作的吗?它在s
上拆分字符串,然后使用00000
格式化解析后的整数,这意味着它会根据需要预加零以匹配长度。“s”+storeNumber
用于处理省略了s
的情况(但如果包括它,则拆分的正则表达式[s]+
将在任意数量的连续s
上拆分。好吧,我说它没有使用正则表达式时撒了谎:-)