java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1
我试图从TXT文件中读取一些单词,但出现以下错误:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1。我不知道出了什么问题,可能是有开始和结束索引。。。你知道如何解决这个问题吗?请。。。谢谢java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1,java,substring,Java,Substring,我试图从TXT文件中读取一些单词,但出现以下错误:java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1。我不知道出了什么问题,可能是有开始和结束索引。。。你知道如何解决这个问题吗?请。。。谢谢 import java.util.ArrayList; import java.io.*; import java.util.*; /** * Write a description of class Zoznam here. * * @auth
import java.util.ArrayList;
import java.io.*;
import java.util.*;
/**
* Write a description of class Zoznam here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Sklad
{
Tovar tovar;
ArrayList<Tovar> potrZoznam = new ArrayList<Tovar>();
String aDruh;
String aVaha;
String aKrajinaPôvodu;
String aCena;
int i;
// /**
// * Constructor for objects of class Zoznam
// */
// public Zoznam()
// {
//
// }
public int getSkladDlzka()
{
return potrZoznam.size();
}
public void pridajPotravinu(String paDruh, String paVaha, String paKrajinaPôvodu, String paCena) throws IOException
{
Tovar a1= new Tovar(paDruh, paVaha, paKrajinaPôvodu, paCena);
potrZoznam.add(a1);
}
public void nacitajZoSuboru()
throws IOException
{
FileReader fr = new FileReader("subor.txt");
BufferedReader in = new BufferedReader(fr);
String riadok, pom;
int i = 0;
System.out.print("\f");
while((riadok = in.readLine()) != null) {
aDruh = riadok.substring(0, riadok.indexOf('/'));
riadok = riadok.substring(riadok.lastIndexOf('/') + 1, riadok.length());
int x = 0;
riadok = riadok.substring(riadok.lastIndexOf('/') + 1, riadok.length());
////////////////////////////////
aKrajinaPôvodu = riadok.substring(0, riadok.lastIndexOf('/')); // error there
riadok = riadok.substring(riadok.lastIndexOf('/') + 1, riadok.length());
aCena = riadok.substring(0, riadok.lastIndexOf('/'));
riadok = riadok.substring(riadok.lastIndexOf('/') + 1 , riadok.length());
i++;
pridajPotravinu(aDruh, aVaha, aKrajinaPôvodu, aCena);
}
fr.close();
}
public void PridatDoSkladu() throws FileNotFoundException, IOException
{
String aDruh, aVaha, aKrajinaPôvodu, aCena, novyRiadok;
Scanner vstup = new Scanner (System.in);
System.out.println("\fPRIDAŤ DO Skladu:");
System.out.println("\nZadajte Druh:");
aDruh = vstup.nextLine();
System.out.println("\nZadajte Vahu: ");
aVaha = vstup.nextLine();
System.out.println("\nZadajte Krajinu Pôvodu: ");
aKrajinaPôvodu = vstup.nextLine();
System.out.println("\nZadajte Canu");
aCena = vstup.nextLine();
System.out.println("\f\nVami zadane údaje sú: \n" + aDruh + ", " + aVaha + ", " + aKrajinaPôvodu + ", " + aCena + ".");
novyRiadok = (aDruh + " " + aVaha + " " + aKrajinaPôvodu + ", " + aCena);
PrintWriter zapisdoskladu = new PrintWriter(new FileOutputStream("subor.txt",true));
zapisdoskladu.print(novyRiadok);
zapisdoskladu.println();
zapisdoskladu.close();
pridajPotravinu(aDruh, aVaha, aKrajinaPôvodu, aCena);
}
public void AktualizujSubor() throws FileNotFoundException, IOException
{
File frM = new File("subor.txt");
FileWriter fw = new FileWriter("subor.txt");
int a = getSkladDlzka();
for (int i =0; i<a ;i++)
{
String novyRiadok = (potrZoznam.get(i).getDruh() + " " + potrZoznam.get(i).getVaha() + " " + potrZoznam.get(i).getKrajinaPôvodu() + "," + potrZoznam.get(i).getCena());
PrintWriter zapisdoskladu = new PrintWriter(new FileOutputStream("sklad.txt",true));
zapisdoskladu.print(novyRiadok);
zapisdoskladu.println();
zapisdoskladu.close();
}
fw.close();
}
public void Vypis(int i)
{
System.out.printf("%-20d. %-20s %-30s %-10s ",i+1, potrZoznam.get(i).getDruh() + " " + potrZoznam.get(i).getVaha() + " " + potrZoznam.get(i).getKrajinaPôvodu() + "," + potrZoznam.get(i).getCena());
}
public void zoradPodlaCeny()
{
boolean Zamena;
do{
Zamena=false;
for (int i=0;i<potrZoznam.size()-1;i++)
{
if (potrZoznam.get(i).getCena().compareToIgnoreCase(potrZoznam.get(i+1).getCena())>0)
{
Tovar tovar = potrZoznam.get(i);
potrZoznam.set(i, potrZoznam.get(i+1));
potrZoznam.set(i+1, tovar);
Zamena=true;
}
}
} while (Zamena);
}
import java.util.ArrayList;
导入java.io.*;
导入java.util.*;
/**
*在这里写下Zoznam类的描述。
*
*@author(你的名字)
*@version(版本号或日期)
*/
公共级Sklad
{
托瓦尔托瓦尔;
ArrayList potrZoznam=新的ArrayList();
字符串aDruh;
字符串aVaha;
字符串aKrajinaPôvodu;
线状aCena;
int i;
// /**
//*Zoznam类对象的构造函数
// */
//公共佐兹南()
// {
//
// }
公共int getSkladDlzka()
{
返回potrZoznam.size();
}
public void pridajPotravinu(字符串paDruh、字符串paVaha、字符串pakrainapôvodu、字符串paCena)引发IOException
{
Tovar a1=新的Tovar(paDruh、paVaha、Pakrainapôvodu、paCena);
potrZoznam.增补(a1);
}
公共无效nacitajZoSuboru()
抛出IOException
{
FileReader fr=新的FileReader(“subor.txt”);
BufferedReader in=新的BufferedReader(fr);
字符串riadok,pom;
int i=0;
系统输出打印(“\f”);
而((riadok=in.readLine())!=null){
aDruh=riadok.substring(0,riadok.indexOf('/');
riadok=riadok.substring(riadok.lastIndexOf('/')+1,riadok.length());
int x=0;
riadok=riadok.substring(riadok.lastIndexOf('/')+1,riadok.length());
////////////////////////////////
aKrajinaPôvodu=riadok.substring(0,riadok.lastIndexOf('/');//出现错误
riadok=riadok.substring(riadok.lastIndexOf('/')+1,riadok.length());
aCena=riadok.substring(0,riadok.lastIndexOf('/');
riadok=riadok.substring(riadok.lastIndexOf('/')+1,riadok.length());
i++;
pridajPotravinu(阿德鲁、阿瓦哈、阿克拉吉纳普·沃杜、阿塞纳);
}
fr.close();
}
public void PridatDoSkladu()引发FileNotFoundException,IOException
{
字符串aDruh、aVaha、Akrainapôvodu、aCena、novyRiadok;
Scanner vstup=新扫描仪(System.in);
System.out.println(“\fPRIDAŤDO Skladu:”);
System.out.println(“\nZadajte Druh:”);
aDruh=vstup.nextLine();
System.out.println(“\nZadajte Vahu:”);
aVaha=vstup.nextLine();
System.out.println(“\nZadajte Krajinu Pôvodu:”);
aKrajinaPôvodu=vstup.nextLine();
System.out.println(“\nZadajte Canu”);
aCena=vstup.nextLine();
System.out.println(“\f\nVami zadaneúdaje sú:\n“+aDruh+”、“+aVaha+”、“+Akrainapôvodu+”、“+aCena+”);
novyRiadok=(aDruh+“”+aVaha+“”+aKrajinaPôvodu+”,“+aCena);
PrintWriter zapisdoskladu=新的PrintWriter(新文件输出流(“subor.txt”,true));
zapisdoskladu.印刷(novyRiadok);
println();
zapisdoskladu.close();
pridajPotravinu(阿德鲁、阿瓦哈、阿克拉吉纳普·沃杜、阿塞纳);
}
public void AktualizujSubor()抛出FileNotFoundException、IOException
{
文件frM=新文件(“subor.txt”);
FileWriter fw=新的FileWriter(“subor.txt”);
int a=getSkladDlzka();
对于(inti=0;i,您的问题只是代码对传入字符串的“布局”做出了许多假设
你看,所有这些方法,比如indexOf()或lastIndexOf()在没有这样的索引时返回-1
换句话说:在处理字符串并使用“索引”进行子字符串调用之前,必须验证您对传入字符串布局的假设
例如,通过做以下事情
int index = whatever.indexOf("/");
if (index != -1) {
...
或者进行一些“初始”验证;例如使用正则表达式
长话短说:“子字符串”有两种方式从字符串:要么你首先确保你要查找的所有东西都在那里……要么你处理这样的异常,这些异常告诉你:传入的字符串与你在代码中写下的期望不匹配!哪一行抛出了该异常?你能包括堆栈跟踪吗?我在代码中标记了它。^ ^ aKrajinaPôvodu=riadok.substring(0,riadok.lastIndexOf('/');lastIndexOf
如果在字符串中找不到它,则返回-1
。提示:这里的主要语言是英语。对于源代码来说也是如此,因此没有“英语”源代码只会减少快速/准确回答的机会。