模式和匹配器:如何 - 连接模式和字符串以进行文件搜索

时间:2012-04-03 23:52:43

标签: java class amazon-s3 amazon-web-services amazon

所以我在Java中使用AWS SDK,我创建了一个类来下载S3服务器中的存储桶/对象。

我现在需要的是创建类似通配符或模式的东西来附加一个名为(“reports”)的字符串。我唯一想到的就是创建一个模式匹配器变量,如下所示:

 Pattern p = Pattern.compile("[a-zA-Z][0-9]");
    Matcher m = p.matcher(prePattern);

    ObjectListing s3ObjectList = s3client.listObjects(new ListObjectsRequest()
                                               .withBucketName(bucketName)
                                               .withPrefix(m  + "reports"));+

有人可以告诉我,如果有更好的解决方案,我正在尝试做什么,或者我是否做得恰到好处?

谢谢!


新代码:

      String bucketName = "blabla";
      String prePattern = "^[a-z0-9_-]{1,30}$";
      String prefixPat = " -- Insert Pattern Here -- ";
      ArrayList<String> objPrefix = new ArrayList();

    Pattern p = Pattern.compile(prePattern);
    Matcher m = p.matcher(prefixPat);

    for(int i=0; i<= objPrefix.size(); i++)
   {
        objPrefix.add(m + "reports");
        ObjectListing s3ObjectList = s3client.listObjects(new ListObjectsRequest()
                                               .withBucketName(bucketName)
                                               .withPrefix(objPrefix.get(i)));

   }   

你们这些想法?真的很感激。谢谢!

1 个答案:

答案 0 :(得分:1)

对AWS知之甚少,但代码的m + "reports"部分正在调用m.toString并将其与文字“报告”连接起来。 Matcher对象的toString通常没那么有用。

从这段代码:

Pattern p = Pattern.compile("[a-zA-Z][0-9]");
Matcher m = p.matcher("test");
System.out.println( m +  "reports" );

我在OS X上得到了这个:

 java.util.regex.Matcher[pattern=[a-zA-Z][0-9] region=0,4 lastmatch=]reports

可能不是您要传递给ObjectListing的内容。

您需要将m +替换为对您的代码更有意义的内容。