Java 例外:ArrayIndexOutOfBounds
当我试图将数据从文件读入数组时,会出现Java 例外:ArrayIndexOutOfBounds,java,Java,当我试图将数据从文件读入数组时,会出现数组索引越界异常。该文件有700行数据,类似于: 血管炎血浆交换“,”FCE883“,”http://ncbi.nlm.nih.gov/pubmed/18646089“,”(252232 131)” “血管炎-强的松”,“C5E384”http://ncbi.nlm.nih.gov/pubmed/19588365“,”(197227132)” 我的代码是: static{ COLOR_CODES = new ArrayList<String
数组索引越界异常。该文件有700行数据,类似于:
血管炎血浆交换“,”FCE883“,”http://ncbi.nlm.nih.gov/pubmed/18646089“,”(252232 131)”
“血管炎-强的松”,“C5E384”http://ncbi.nlm.nih.gov/pubmed/19588365“,”(197227132)”
我的代码是:
static{
COLOR_CODES = new ArrayList<String[]>();
try{
FileReader fr = new FileReader("Crayon.properties");
BufferedReader br = new BufferedReader(fr);
String line;
while ( (line = br.readLine()) != null) {
COLOR_CODES.add(new String[]{line});
}
br.close();
fr.close();
}catch (Exception e){
throw new IllegalStateException("Couldn't load array file");
}
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,
IOException
{
JSONArray fullColorArray;
String query = request.getParameter("q");
try {
int count = 0;
if (query.equals(m_lastQuery)) {
fullColorArray = m_lastResults;
count = m_lastResults.length();
} else {
m_lastQuery = query;
fullColorArray = new JSONArray();
for (String[] colorCode : COLOR_CODES) {
String colorName = colorCode[0];
String lowerColor = colorName.toLowerCase();
int has = lowerColor.indexOf(query.toLowerCase());
if (!query.isEmpty() && (query.equals("*") || has >= 0)) {
JSONObject color = new JSONObject();
color.put("DisplayName", colorName);
color.put("Value", colorCode[1]); // <-------- ArrayIndexOutOfBoundsException
color.put("Description", colorCode[2]);
color.put("RGB", colorCode[3]);
fullColorArray.put(color);
count++;
}
}
m_lastResults = fullColorArray;
}
static{
COLOR_CODES=new ArrayList();
试试{
FileReader fr=新的FileReader(“Crayon.properties”);
BufferedReader br=新的BufferedReader(fr);
弦线;
而((line=br.readLine())!=null){
添加(新字符串[]{line});
}
br.close();
fr.close();
}捕获(例外e){
抛出新的IllegalStateException(“无法加载数组文件”);
}
}
@凌驾
public void doGet(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException,
IOException
{
JSONArray全彩色阵列;
字符串查询=request.getParameter(“q”);
试一试{
整数计数=0;
if(query.equals(m_lastQuery)){
fullColorArray=m_lastResults;
count=m_lastResults.length();
}否则{
m_lastQuery=查询;
fullColorArray=new JSONArray();
for(字符串[]颜色代码:颜色代码){
字符串colorName=colorCode[0];
字符串lowerColor=colorName.toLowerCase();
int has=lowerColor.indexOf(query.toLowerCase());
如果(!query.isEmpty()&&(query.equals(“*”)| | has>=0)){
JSONObject color=新的JSONObject();
color.put(“DisplayName”,colorName);
color.put(“Value”,colorCode[1]);//您没有指定ArrayIndexOutOfBounds异常发生的位置-我假设该位置不在上述代码中
为什么要构造数组的ArrayList?您是否知道
COLOR_CODES.add(new String[]{line});
将数组添加到ArrayList;数组本身包含一个元素,即刚刚读取的行
是不是你想做类似的事情
COLOR_CODES.add(line.split('insert_your_split_regex_here'));
?我想你想要的是:
while ( (line = br.readLine()) != null)
COLOR_CODES.add(line.split(","));
我认为该代码不可能给出该异常
- 该代码中使用的任何方法或基元操作都不会引发该异常
- 如果他们(假设)这样做了,那么
catch
会将其转换为另一个异常,并且在堆栈跟踪(如果有的话)中不会看到原始异常的任何跟踪
我想你会发现它被抛出到其他代码中。除非包含其他代码和stacktrace,否则我认为我们无法帮助你。(更好的是,提供一个…以便我们可以重现错误。)
-
根据您的分隔符将行拆分为字符串[]
。您应该在问题中添加stacktrace消息,并解释您希望从该代码中得到什么,因为将整行保存到新字符串[]{line}
have no reason.java.lang.ArrayIndexOutOfBoundsException:1位于org.spiffyui.spiffynavigation.server.CrayonColorsServlet.doGet(CrayonColorsServlet.java:103)color.put(“Value”,colorCode[1]);我使用MVsb示例()(集成到“导航”示例)自动完成数据显示。A.类路径具有“src/main/resources”保存数据文件的位置。此错误同时发生在cmd和eclipse上。是的,但ArrayIndexOutOfBounds异常不可能是这种情况。它给出了NullPointerException?我应该使用,在拆分行的位置添加一些日志记录以检查结果。如果正确拆分并在数组中设置字符串,则应work@user2339074-发布NullPointerException您拥有的NullPointerException位于“count=m_lastResults.length();”请注意颜色代码.add(新字符串[]{“Vasculatis_PlasmaExchange”、“#FCE883”、”、“,”(252,232,131)“});颜色代码。添加(新字符串[]{“血管炎强的松”,“C5E384”,“197227132)”);工作完美。通过数组数组,可以方便地访问自动完成建议框中的多个值。此外,按“\”拆分,“将给出错误。在您的行字符串[]somearray=someline.split(\\”,)之后;
,添加一个类似于的检查,如果(somearray.length!=4){System.err.println(“错误分析行”+someline+”,数组是:“+Arrays.toString(somearray));}
二者”,“和”\”,"在访问数组时拆分为NullPointerException。示例位于:。第65行在第90行生成NullPointerException&&ArrayIndexOutOfBoundsException,位于101。请注意,我将数据从crayoncolorservlet.java传输到crayon.properties文件。该文件位于类路径中的src\main\resources。因此,我假设阵列可以访问该文件。如果我从未看到catch异常,它是否保证我的文件确实已被读取?1)A无法确定您实际引用的是哪个文件。2)不一定。在某些情况下,不会报告未捕获的异常。我得到的NullPointerException似乎是因为Crayon.properties文件在最外层文件夹时是只读的,而不是在其类路径时。
while ( (line = br.readLine()) != null)
COLOR_CODES.add(line.split(","));