Лучше всего использовать Integer.parseInt. Это вернет int , но это может быть автоматически упаковано в целое число. Это немного быстрее, чем valueOf, так как, когда ваши числа между -128 и 127, он будет использовать кэш Integer, а не создавать новые объекты. Самый медленный метод Apache.
private String data = "99";
public void testParseInt() throws Exception {
long start = System.currentTimeMillis();
long count = 0;
for (int i = 0; i < 100000000; i++) {
Integer o = Integer.parseInt(data);
count += o.hashCode();
}
long diff = System.currentTimeMillis() - start;
System.out.println("parseInt completed in " + diff + "ms");
assert 9900000000L == count;
}
public void testValueOf() throws Exception {
long start = System.currentTimeMillis();
long count = 0;
for (int i = 0; i < 100000000; i++) {
Integer o = Integer.valueOf(data);
count += o.hashCode();
}
long diff = System.currentTimeMillis() - start;
System.out.println("valueOf completed in " + diff + "ms");
assert 9900000000L == count;
}
public void testIntegerConverter() throws Exception {
long start = System.currentTimeMillis();
IntegerConverter c = new IntegerConverter();
long count = 0;
for (int i = 0; i < 100000000; i++) {
Integer o = (Integer) c.convert(Integer.class, data);
count += o.hashCode();
}
long diff = System.currentTimeMillis() - start;
System.out.println("IntegerConverter completed in " + diff + "ms");
assert 9900000000L == count;
}
parseInt completed in 5906ms
valueOf completed in 7047ms
IntegerConverter completed in 7906ms
string pattern = @"I[A-Z]{3}_\d{5}-\d_\d{8}_\d{8}_\d{6}\.zip";
var matches = Directory.GetFiles(@"c:\temp")
.Where(path => Regex.Match(path, pattern).Success);
foreach (string file in matches)
Console.WriteLine(file); // do something
Это зависит от того, насколько конкретно вы хотите сопоставить эти имена. Достаточно ли это конкретное:
I[A-Z]{3}_\d{5}-\d_\d{8}_\d{8}_\d{6}\.zip
?
Объяснение:
I // match an 'I'
[A-Z]{3} // followed by three upper case letters
_ // followed by an underscore
\d{5} // followed by five digits
- // followed by a hyphen
\d // followed by a single digit
_ // followed by an underscore
\d{8} // followed by eight digits
_ // followed by an underscore
\d{8} // followed by eight digits
_ // followed by an underscore
\d{6} // followed by six digits
\.zip // followed by '.zip'
Но, если у вас есть файлы, имена которых содержат недопустимые даты или время, это практически невозможно сделать с одним регулярным выражением, особенно если ваш DATE_DATE
часть указывает диапазон дат. Вам нужно будет сопоставить все имена файлов, которые я (и другие) показал вам, а затем выполнить некоторую «обычную» логику программирования, чтобы отфильтровать недопустимые.
Для простого регулярного выражения, которое также будет соответствовать недопустимым спецификациям времени (например, часы = 73 и т. Д.), Вы можете использовать что-то вроде этого:
^I[A-Z]{3}_\d{5}-\d_\d{8}_\d{8}_\d{6}\.zip$
RegexBuddy - отличный способ потратить несколько долларов (если у вас есть что потратить). Это поможет вам разрабатывать, тестировать и отлаживать регулярные выражения. Он даже создает для вас фрагменты кода.
RegexMagic (от того же автора) может даже помочь вам больше: он помогает вам создавать шаблон регулярного выражения из образцов. (Я не пробовал, поэтому не могу сказать, хорошо ли это).