使用子串方法的误解

时间:2018-04-19 00:27:15

标签: java string

我正在编写一个读取文本文件的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的索引。

0 个答案:

没有答案