0

因此,我在 Java 中使用 AWS 开发工具包,并创建了一个类来下载 S3 服务器中的存储桶/对象。

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

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

   }   

大家想好了吗?真的很感激。谢谢!

4

1 回答 1

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 +为对您的代码更有意义的内容。

于 2012-04-04T00:26:04.210 回答