java - 如何设置 ArrayList
问题描述
我正在尝试运行此代码和 ArrayList data = handler.getnames(); 显示错误变量数据已在方法 main(String[]) 中定义。我猜它希望我将它与 ArrayList data = handler.getsetnums(); 结合起来。但是我该怎么做呢?还是有其他方法?
那些代码可以工作,并且应该能够运行它并获得输出,现在当我只有一个数组工作时,代码可以完成它需要做的事情。
预期结果
<set-num>00-1</set-num>
<name>WEETABIX CASTLE</name>
谢谢你。
---MAIN.java---
package assign6;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
/**
*
* @author assign
*/
public class Assign6 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
System.out.print("Welcome to Benjamin Bolyard's Lego Sorter");
try {
XMLReader reader = XMLReaderFactory.createXMLReader();
MyHandler handler = new MyHandler();
reader.setContentHandler(handler);
reader.setErrorHandler(handler);
InputSource inputSource = new InputSource("legoSets.xml");
reader.parse(inputSource);
ArrayList<String> data = handler.getsetnums();
System.out.println("setnum List");
System.out.println("----------");
for (int i = 0; i < data.size(); i++) {
String setnum = data.get(i);
setnum = setnum.toUpperCase();
System.out.println((i + 1) + ": " + setnum);
}
ArrayList<String> data = handler.getnames();
System.out.println("name List");
System.out.println("----------");
for (int i = 0; i < data.size(); i++) {
String name = data.get(i);
name = name.toUpperCase();
System.out.println((i + 1) + ": " + name);
}
} catch (SAXException ex) {
Logger.getLogger(BolyardAssign6.class.getName())
.log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(BolyardAssign6.class.getName())
.log(Level.SEVERE, null, ex);
}
}
}
--HANDLER.java---
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package bolyardassign6;
import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
/**
*
* @author bolya
*/
public class MyHandler extends DefaultHandler {
private boolean inlegosets;
private boolean inname;
private boolean insetnum;
private String nameBuffer;
private String setnumBuffer;
private ArrayList<String> setnums, names;
public ArrayList<String> getsetnums() {
return setnums;
}
public ArrayList<String> getnames() {
return names;
}
@Override
public void startDocument() throws SAXException {
// System.out.println("Start Document")
insetnum = false;
inname = false;
inlegosets = false;
nameBuffer = "";
names = new ArrayList<>();
}
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
if (localName.equals("lego-sets")) {
inlegosets = true;
} else if (inlegosets && localName.equals("setnum")) {
// System.out.println("Start element : " + localName);
insetnum = true;
setnumBuffer = "";
} else if (inlegosets && localName.equals("name")) {
// System.out.println("Start element : " + localName);
inname = true;
nameBuffer = "";
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String data = new String(ch, start, length);
if (inlegosets && inname) {
// System.out.println("Characters : " + data);
nameBuffer = nameBuffer + data;
} else if (inlegosets && insetnum) {
// System.out.println("Characters : " + data);
setnumBuffer = setnumBuffer + data;
}
}
@Override
public void endElement(String uri, String localName,
String qName) throws SAXException {
if (localName.equals("inlegosets")) {
inlegosets = false;
} else if (inlegosets && localName.equals("setnum")) {
// System.out.println("Title: " + titleBuffer);
// System.out.println("End element : " + localName);
// System.out.println();
setnums.add(setnumBuffer);
insetnum = false;
} else if (inlegosets && localName.equals("name")) {
// System.out.println("Title: " + titleBuffer);
// System.out.println("End element : " + localName);
// System.out.println();
names.add(nameBuffer);
inname = false;
}
}
@Override
public void endDocument() throws SAXException {
// System.out.println("End Document");
}
@Override
public void error(SAXParseException e) throws SAXException {
System.out.println("ERROR: Line number " + e.getLineNumber());
System.out.println("ERROR: " + e.getMessage());
}
@Override
public void fatalError(SAXParseException e) throws SAXException {
System.out.println("FATAL ERROR: Line number " + e.getLineNumber());
System.out.println("FATAL ERROR: " + e.getMessage());
}
}
---legoset.xml---
<lego-sets>
<set>
<set-num>00-1</set-num>
<name>WEETABIX CASTLE</name>
<year>1970</year>
<num-parts>471</num-parts>
</set>
<set>
<set-num>0011-2</set-num>
<name>TOWN MINI-FIGURES</name>
<year>1978</year>
<num-parts>12</num-parts>
</set>
<set>
<set-num>0011-3</set-num>
<name>CASTLE 2 FOR 1 BONUS OFFER</name>
<year>1987</year>
<num-parts>2</num-parts>
</set>
<set>
<set-num>0012-1</set-num>
<name>SPACE MINI-FIGURES</name>
<year>1979</year>
<num-parts>12</num-parts>
</set>
</lego-sets>
解决方案
您已经定义了两个名为 的变量data
。要解决此问题,请更改其中之一的名称。或者,您可以删除声明并在第二个数组列表中添加以下内容:data = handler.getnames();
推荐阅读
- java - 如何拒绝没有特定角色的所有请求 - SpringBoot 安全配置
- javascript - 安全方法 javascript
- reactjs - set 函数不会在 React with Recoil 中触发更新
- reactjs - reactjs从地图对象数据更新setState
- postgresql - PQconnectdb 在连接时设置 search_path (schema)
- spring-kafka - 使用过滤策略和手动提交的spring kafka批处理示例
- javascript - 递归遍历数组的算法的大 O
- typescript-typings - Nx monorepo 中的项目以保存库的类型定义
- javascript - HTML
- javascript - 如何使用 React Js 过滤小于关键搜索日期的对象日期