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

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

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

:

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

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

9
задан Jimmy 20 August 2010 в 14:32
поделиться

7 ответов

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

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

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

4
ответ дан 4 December 2019 в 12:57
поделиться

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

7
ответ дан 4 December 2019 в 12:57
поделиться
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, где вы могли бы вообще избежать явного цикла.

-1
ответ дан 4 December 2019 в 12:57
поделиться

Лично я просто свел бы его к следующему (имея в виду, что 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
ответ дан 4 December 2019 в 12:57
поделиться

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

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

1
ответ дан 4 December 2019 в 12:57
поделиться

Все намного проще:

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

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

0
ответ дан 4 December 2019 в 12:57
поделиться
String[] allowedFormats = classProperties
                           .getProperty("prop_allowed_extensions", "txt, jpeg")
                           .replaceAll("[ \\.]","")
                           .split(",");

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

1
ответ дан 4 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: