我是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:感谢大家提供快速有效的回复!
答案 0 :(得分:2)
使用for循环遍历PictureTest[]
中的元素,并检查每个元素contains()
是否为扩展名。使用ArrayList
或List
来存储值,因为无法修改数组的大小。
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());
}
}