从String数组中查找特定值

时间:2015-07-30 02:09:48

标签: java android arrays

我是Java / Android开发的新手。我需要从字符串数组中获取特定值。

String PictureTest[] = {"a.jpg","b.png","c.txt", "d.wav", "e.tga"};

这个数组每次都不同。我需要获取包含.jpg,.png,.tga的所有值,并与它们形成一个新数组。

System.out.println(Arrays.toString(PictureResult));
//It prints "a.jpg, b.png, e.tga"

UPD:感谢大家提供快速有效的回复!

3 个答案:

答案 0 :(得分:2)

使用for循环遍历PictureTest[]中的元素,并检查每个元素contains()是否为扩展名。使用ArrayListList来存储值,因为无法修改数组的大小。

String PictureTest[] = {"a.jpg","b.png","c.txt", "d.wav", "e.tga"};
ArrayList<String> PictureResult = new ArrayList<String>;

for(String item : PictureTest) {
    if(item.contains(".jpg") || item.contains(".png") || item.contains(".tga") {
        PictureResult.add(item);
    }
}

修改:如果您只需要在结尾处检查文件扩展名,则可以使用endsWith()代替contains()

答案 1 :(得分:1)

以简单的方式,您可以遍历原始数组并搜索您的模式:

List<String> pictureResult = new ArrayList<String>();
for(String picture : PictureTest) {
    //use something like contains or a regex, for example
    if (picture.contains(".jpg"))
        pictureResult.add(picture);
    //etc...
}

你明白了......

答案 2 :(得分:1)

如果您使用的是Java 8,则可以使用Predicates过滤列表。像这样:

public class PredicateTester {

    public static void main(String args[]) {
        String PictureTest[] = {"a.jpg","b.png","c.txt", "d.wav", "e.tga"};
        List<String> filteredList = filterStrings(PictureTest, filter());
        filteredList.forEach(System.out::println);
    }

    public static Predicate<String> filter() {
        return p -> p.endsWith(".jpg") || p.endsWith(".png") || p.endsWith(".tga");
    }

    public static List<String> filterStrings (String[] fileNames, Predicate<String> predicate) {
        return Arrays.asList(fileNames).stream().filter( predicate ).collect(Collectors.<String>toList());
    }
}