我正在编写一个读取文本文件的Java程序,并输出电子邮件数组。 这是我用来获取电子邮件的代码的一部分。
public static EMail[] input(String filename)
{
Scanner infile = null;
try
{
infile = new Scanner(new File(filename));
}
catch (FileNotFoundException e)
{
JOptionPane.showMessageDialog(null, "The file could not be found.");
System.exit(0);
}
int numitems = infile.nextInt();
EMail[] array = new EMail[numitems];
for (int index = 0; index < numitems; index++)
{
String email = infile.nextLine();
array[index] = new EMail(email);
}
infile.close();
return array;
}
这是我的电子邮件课程。如您所见,我正在使用Substring从电子邮件中获取UserName以及HostName和Extension。
//Name______________________________ Date_____________
public class EMail
{
private String myUserName;
private String myHostName;
private String myExtension;
public EMail(String address)
{
int at = address.indexOf('@');
this.myUserName = address.substring(0, at);
int dot = address.indexOf('.');
this.myHostName = address.substring(at + 1, dot);
this.myExtension = address.substring(dot + 1, address.length());
}
public String getUserName()
{
return myUserName;
}
public String getHostName()
{
return myHostName;
}
public String getExtension()
{
return myExtension;
}
public void setUserName(String string)
{
this.myUserName = string;
}
public void setMyHostName(String string)
{
this.myHostName = string;
}
public void setMyExtensionName(String string)
{
this.myExtension = string;
}
public String toString()
{
return( getUserName() + "@" + getHostName() + "." + getExtension());
}
}
最后,这是文本文件。第一个数字对应于文件中的电子邮件数量。
12
tangent@angle.com
comp@2018.com
nsa@security.org
yawn@sleep.sleep
theNumber@files.file
fruit@tree.file
amd@cold.com
Mac@Apple.fruit
woooo@sh.email
meme@social.word
clippy@word.nowgone
java@sun.useful
然而,在运行使用input(data.txt);的Driver08ext之后,我收到了这个错误,这是..
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(Unknown Source)
at Lab08.EMail.<init>(EMail.java:12)
at Lab08.Driver08ext.input(Driver08ext.java:37)
at Lab08.Driver08ext.main(Driver08ext.java:15)
我必须误解Substring的工作原理,因为我从不访问小于0的索引。