Более элегантное решение для создания массива из списка свойств через запятую? - PullRequest
9 голосов
/ 20 августа 2010

В моем файле свойств у меня есть одно свойство, которое содержит список значений, разделенных запятыми

В моем коде я хотел бы загрузить это свойство, отделить его от запятых и добавить каждое значение вмассив.Я также хочу убедиться, что у меня нет значений в массиве из-за пробелов и т.д.Есть ли более элегантное решение?

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]);                
}

Я просто хочу, чтобы текст расширения файла, было бы целесообразно использовать регулярное выражение для удаления пробелов / не букв?

Ответы [ 7 ]

7 голосов
/ 20 августа 2010

Конфигурация 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

4 голосов
/ 20 августа 2010

Лично я бы просто свел это к следующему (имея в виду, что 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*.?");
4 голосов
/ 20 августа 2010

Вы можете сделать это в два этапа:

String[] allowedExtensions = str.replaceAll("[^\\w,_]", "").split(",")

(сначала убить все, что не является ни запятой, ни подчеркиванием, ни символом слова (буквой или цифрой), затем разбить получившуюся строку

1 голос
/ 20 августа 2010
String[] allowedFormats = classProperties
                           .getProperty("prop_allowed_extensions", "txt, jpeg")
                           .replaceAll("[ \\.]","")
                           .split(",");

С Java 1.5 или выше, в формате Array.

1 голос
/ 20 августа 2010

Следуя вашему шаблону, вы можете сделать это так:

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(",") будет вызываться только один раз, поэтому проблем с производительностью нет.

0 голосов
/ 20 августа 2010

Это намного проще:

String test = classProperties.getProperty("prop_allowed_extensions", "txt, jpeg");
String[] splitString = test.trim().split("\\s*,\\s*");

(требуется Java 5)

0 голосов
/ 20 августа 2010
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, где вы могли бы вообще избежать явного цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...