JAVA - 如何从for循环外部访问FOR循环内的变量

Ale*_*exM 2 java for-loop

我的代码是将RSS提要添加到列表中 - 最初的代码只是从列表中的第一个位置提取一个提要,并将此对象添加到另一个列表中.

这是原始代码:

public static List<Feed> getFeedsFromXml(String xml) {
      Pattern feedPattern = Pattern.compile("<feed>\\s*<name>\\s*([^<]*)</name>\\s*<uri>\\s*([^<]*)</uri>\\s*</feed>");


      Matcher feedMatch = feedPattern.matcher(xml);
      while (feedMatch.find()) {
          String feedName = feedMatch.group(1);
          String feedURI = feedMatch.group(2);
          feeds.add(new Feed(feedName, feedURI));
      }

      return feeds;
}

@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public String addXmlFeed() throws IOException
{
    int i = 0;
    String stringXml = "<feed><name>SMH Top Headlines</name><uri>http://feeds.smh.com.au/rssheadlines/top.xml</uri></feed><feed><name>UTS Library News</name>";
    getFeedsFromXml(stringXml);
    Feed f = (Feed) feeds.get(0);
    feedList.add(f);
    String handler = "You have successfully added: \n"; 
    String xmlStringReply = "" + f + "\n";

    feedList.save(feedFile);
    return handler + xmlStringReply;

}
Run Code Online (Sandbox Code Playgroud)

一切进展顺利,然后我决定实现一个for循环来处理向列表添加多个feed,我尝试了以下(只有第二个方法的代码):

@POST
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public String addXmlFeed() throws IOException
{
    int i = 0;
    String stringXml = "<feed><name>SMH Top Headlines</name><uri>http://feeds.smh.com.au/rssheadlines/top.xml</uri></feed><feed><name>UTS Library News</name>";
    getFeedsFromXml(stringXml);
    for (Feed feed: feeds)
    {
        Feed f = (Feed) feeds.get(i++);
        feedList.add(f);
        String handler = "You have successfully added: \n"; 
        String xmlStringReply = "" + f + "\n";
    }

    feedList.save(feedFile);
    return handler + xmlStringReply;

}
Run Code Online (Sandbox Code Playgroud)

现在我确定这是一个基本问题,但现在在线:

    return handler + xmlStringReply;
Run Code Online (Sandbox Code Playgroud)

handler并且xmlStringReply无法解析为变量,因为它们在FOR LOOP中.

这有什么简单的方法吗?

ass*_*ias 11

这两个变量的范围仅限于for循环.要在循环外访问它们,您需要通过在循环之前声明它们来增加它们的范围:

String handler = ""; 
String xmlStringReply = "";
for (Feed f: feeds) {
    feedList.add(f);
    handler = "You have successfully added: \n"; 
    xmlStringReply = "" + f + "\n";
}

feedList.save(feedFile);
return handler + xmlStringReply;
Run Code Online (Sandbox Code Playgroud)

此外,您当前的代码会在每个循环中覆盖字符串的值,而您可能想要连接这些值.在这种情况下,您可以使用StringBuilder而不是字符串连接:

StringBuilder xmlStringReply = new StringBuilder("You have successfully added: \n");
for (Feed f: feeds) {
    feedList.add(f);
    xmlStringReply.append(f + "\n");
}

feedList.save(feedFile);
return xmlStringReply.toString();
Run Code Online (Sandbox Code Playgroud)