使用正则表达式获取与特定模式匹配的一组字符串中的最大数字的最佳方法是什么。 例如:
假设我想找到下一个整数来为Untitled文件添加后缀。
以下是现有文件名的示例:
在此示例中,以下函数应返回: 3
public int getNextUntitledFileSuffix(String[] fileNames){
int nextSuffix = 1;
int maxSuffix = 1;
for (int i = 0; i < fileNames.length; i++){
//use regex to set nextSuffix
}
return nextSuffix;
}
答案 0 :(得分:0)
您可以使用此代码从untitledNNN.java
文件名中提取数字部分:
Pattern p = Pattern.compile("^untitled(\\d+)[.]java$", Pattern.CASE_INSENSITIVE);
for (String fileName : fileNames) {
Matcher m = p.matcher(fileName);
if (!m.find()) {
continue;
}
String digits = m.group(1);
... // Parse and find the max
}
由于您可以在数字不适合int
时抛出异常,因此可以使用throws NumberFormatException
标记方法,并使用Integer.parseInt(digits)
获取值。之后,您可以将数字与maxSuffix
进行比较,maxSuffix
是序列的运行最大值。你应该从零开始maxSuffix
而不是一,因为你会在最后增加它。
为避免溢出,请在返回Integer.MAX_VALUE
之前检查maxSuffix+1
是否等于i
。
答案 1 :(得分:0)
我根据dasblinkenlight的回答添加了其余的逻辑:
public int getNextUntitledFileSuffix(List<String> fileNames) throws NumberFormatException
{
int maxSuffix = 0;
final Pattern pattern = Pattern.compile("^untitled(\\d+)[.]java$", Pattern.CASE_INSENSITIVE);
for (String fileName : fileNames)
{
Matcher matcher = pattern.matcher(fileName);
if (matcher.find())
{
int suffix = Integer.parseInt(matcher.group(1));
if (suffix > maxSuffix)
{
maxSuffix = suffix;
}
}
}
return maxSuffix + 1;
}