【问题标题】:using a String variable outside loop在循环外使用字符串变量
【发布时间】:2013-03-01 13:18:28
【问题描述】:

在 StAX 解析示例中,我设置了 String dataread = se.getElementText();。 我立即成功打印该字符串(数据读取)。

但是,在我的代码中的其他任何地方,它都不起作用,它报告它找不到符号dataread。您将看到它正在尝试 5 个其他点进入代码 - 所有报告都相同。 if 语句中的第一行有效。

如何在程序的其他地方使用字符串“dataread”?

谢谢

public static void main(String[] args) throws FileNotFoundException, XMLStreamException
{
    // TODO code application logic here
    //System.out.println("Here");
    //String filename = null;
    String filename = "BookCatalog2.xml";
    XMLInputFactory factory = XMLInputFactory.newInstance();
    XMLEventReader reader = factory.createXMLEventReader(new FileReader(filename));
    while(reader.hasNext())
            {
                XMLEvent event = reader.nextEvent();
                XMLEvent nextEvent = reader.peek();
                switch (event.getEventType())
                        {
                    case XMLEvent.START_ELEMENT:

                        StartElement se = event.asStartElement();
                        //System.out.println("Here");
                        //System.out.print("<" + se.getName());

                        //System.out.print(" " + se.getName());
                        //System.out.printf("\n");
                        String elem = se.getName().toString();
                        //String elem = "1";
                        //System.out.printf("elem = %s\n",elem);
                        //String ele = event.getAttributeName();

                        System.out.printf("event = %s\n",se.getName());

                        //if( se.getName().toString() == "{http://www.publishing.org}Date")
                       if( se.getName().toString().equals("Date"))
                       //if( elem == "1")
                        {
                            System.out.println("Here !!!!!!!!!!!!!!!!!");
                            String dataread = reader.getElementText();
                            //System.out.printf("data = %s\n",reader.getElementText());
                            System.out.printf("data = %s\n",dataread);
                        }
                        Iterator attributes = se.getNamespaces();
                        System.out.printf("DATA READ = %s\n",dataread);
                        while(attributes.hasNext())
                        {
                            Attribute attr= (Attribute)attributes.next();
                            System.out.print(" " + attr.getName() + "=\"" +attr.getValue() +"\"");
                            System.out.printf("\n");
                        }//end while loop
                    System.out.print(">");
                        if(nextEvent.isCharacters())
                        {
                            Characters c = reader.nextEvent().asCharacters();
                            if(!c.isWhiteSpace())
                            System.out.print(c.getData());
                            System.out.printf("\n");


                        }// end if
                        System.out.printf("DATA READ = %s\n",dataread);
                    /*case XMLEvent.END_ELEMENT>
                        EndElement ee = event.asEndElement();
                        System.out.print("</"+ee.getName()+">");
                        break;
                        * */
                        System.out.printf("DATA READ = %s\n",dataread);
                        }// end witch
                System.out.printf("DATA READ = %s\n",dataread);
            }// end while
    System.out.printf("DATA READ = %s\n",dataread);
    reader.close();
}//end Main
}// public claSS

【问题讨论】:

    标签: java string stax


    【解决方案1】:

    你的字符串在你的第一个 IF 的范围内,你必须在方法的开头声明它。

    尝试在String filename = "BookCatalog2.xml";之后声明

    例如:

    String filename = "BookCatalog2.xml";
    String dataread = "";
    

    【讨论】:

      【解决方案2】:

      您的字符串变量dataread 是一个局部变量,其范围仅在 if 子句中。

      因此,您将无法在 if 块之外访问此变量。要在打印时允许访问此变量,必须在 if 语句之前声明它。例如:

      String dataread = null;
      if (test) {
          dataread = ...;
      }
      
      System.out.println(dataread); // etc
      

      【讨论】:

        【解决方案3】:

        您需要做的是在每个方法都处于同一级别或低于该级别的级别上声明局部变量。就像现在您在 if 子句中声明变量一样,那么您将只能从该 if 子句中访问它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-12
          • 1970-01-01
          • 1970-01-01
          • 2013-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-04
          相关资源
          最近更新 更多