В моем файле свойств у меня есть одно свойство, которое содержит список значений, разделенных запятыми
В моем коде я хотел бы загрузить это свойство, отделить его от запятых и добавить каждое значение в массив. Я также хочу убедиться, что у меня нет значений в массиве из-за пробелов и т.д. Свойство примера
:
prop_allowed_extensions = .jpeg,tiff, .txt
Я до сих пор придумал это, но он кажется грязным, Есть ли более элегантное решение?
String test = classProperties.getProperty("prop_allowed_extensions", "txt, jpeg");
String[] splitString = StringUtils.split(test, ',');
String[] newString = new String[splitString.length];
for (int i = 0; i < splitString.length; i++)
{
newString[i] = StringUtils.trim(splitString[i]);
}
Я просто хочу, чтобы текст расширения файла, было бы целесообразно использовать регулярное выражение для удаления пробелов / не букв?
Вы можете сделать это в два этапа:
String[] allowedExtensions = str.replaceAll("[^\\w,_]", "").split(",")
(Сначала уничтожьте все, что не является запятой, подчеркиванием или символом слова (буквой или цифрой), затем разделите полученную строку
Конфигурация Apache Jakarta Commons аккуратно обрабатывает файл свойств, позволяя указывать списки в разных форматах:
colors.pie = #FF0000, #00FF00, #0000FF
ИЛИ
colors.pie = #FF0000;
colors.pie = #00FF00;
colors.pie = #0000FF;
И получить такой список:
String[] colors = config.getStringArray("colors.pie");
List colorList = config.getList("colors.pie");
См. How-to
String test = classProperties.getProperty("prop_allowed_extensions", "txt, jpeg");
String[] splitString = StringUtils.split(test, ',');
for(String s : splitString) {
s = StringUtils.trim(s);
}
было бы немного более элегантно, но Java не поддерживает LINQ, как .net, где вы могли бы вообще избежать явного цикла.
Лично я просто свел бы его к следующему (имея в виду, что String.split ()
принимает регулярное выражение), но я не знаю, подумаете ли вы об этом подробнее. элегантный:
String test = classProperties.getProperty("prop_allowed_extensions",
"txt, jpeg");
String[] extensions = test.trim().split("\\s*,\\s*");
Изменить : Вы также можете удалить начальную точку на каждом расширении, если она присутствует (этим или одним из нескольких других способов):
String[] test = classProperties.getProperty("prop_allowed_extensions",
"txt, jpeg").trim().split("^\\.", 2);
String[] extensions = test[test.length - 1].split("\\s*,\\s*.?");
Следуя вашему шаблону, можно сделать так:
String test = classProperties.getProperty("prop_allowed_extensions", "txt, jpeg");
List<String> extensions = new ArrayList<String>();
for (String part:test.split(",")) {
extensions.add(part.trim());
}
Разница в том, что теперь результат находится в списке. test.split(",")
будет вызван только один раз, поэтому проблем с производительностью нет.
Все намного проще:
String test = classProperties.getProperty("prop_allowed_extensions", "txt, jpeg");
String[] splitString = test.trim().split("\\s*,\\s*");
(требуется Java 5)
String[] allowedFormats = classProperties
.getProperty("prop_allowed_extensions", "txt, jpeg")
.replaceAll("[ \\.]","")
.split(",");
В Java 1.5 или выше, в формате массива.