验证并替换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
上拆分。好吧,我说它没有使用正则表达式时撒了谎:-)