从逗号sep属性列表创建数组的更优雅的解决方案?

时间:2010-08-20 14:32:09

标签: java arrays properties

在我的属性文件中,我有一个属性,其中包含逗号分隔的值列表

在我的代码中,我想加载该属性,将其从逗号中拆分,并将每个值添加到数组中。我还想确保由于空白等而没有数组中的值

示例属性:

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

我只想要文件扩展名的文本,是否适合使用正则表达式删除空格/非字母?

7 个答案:

答案 0 :(得分:7)

Apache Jakarta Commons Configuration以干净的方式处理属性文件,允许您以不同的格式指定列表:

colors.pie = #FF0000, #00FF00, #0000FF

OR

colors.pie = #FF0000;
colors.pie = #00FF00;
colors.pie = #0000FF;

得到这样的清单:

String[] colors = config.getStringArray("colors.pie");
List colorList = config.getList("colors.pie");

请参阅How-to

答案 1 :(得分:4)

您可以分两步完成:

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

(首先杀死任何不是逗号,下划线或单词字符(字母或数字)的内容,然后拆分结果字符串

答案 2 :(得分:4)

我个人只是把它简化为以下(请记住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*.?");

答案 3 :(得分:1)

按照你的模式,你可以这样做:

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(",")只会被调用一次,因此没有性能问题。

答案 4 :(得分:1)

String[] allowedFormats = classProperties
                           .getProperty("prop_allowed_extensions", "txt, jpeg")
                           .replaceAll("[ \\.]","")
                           .split(",");

使用Java 1.5或更高版本,采用数组格式。

答案 5 :(得分:0)

这更简单:

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

(需要Java 5)

答案 6 :(得分:-1)

String test = classProperties.getProperty("prop_allowed_extensions", "txt, jpeg");
String[] splitString = StringUtils.split(test, ',');
for(String s : splitString) {
    s = StringUtils.trim(s);
}

稍微优雅一点,但Java不支持像.net这样的LINQ,你可以完全避免显式循环。