Java 字符串索引超出范围
我收到一个错误:StringIndex超出范围:-1,错误行为字符串anEmail=lineFromFile.substring(s+1,e)。正如你所看到的,我试图在输入文件中打印一行的一部分,但我不工作。有人能帮我解释一下原因吗Java 字符串索引超出范围,java,exception,indexing,Java,Exception,Indexing,我收到一个错误:StringIndex超出范围:-1,错误行为字符串anEmail=lineFromFile.substring(s+1,e)。正如你所看到的,我试图在输入文件中打印一行的一部分,但我不工作。有人能帮我解释一下原因吗 import java.io.*; public class Email13 { static boolean isValidEmailCharacter(char c) { boolean result = false;
import java.io.*;
public class Email13
{
static boolean isValidEmailCharacter(char c)
{
boolean result = false;
if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||(c>='0'&&c<='9')||(c=='.')||(c=='-')||(c=='+'))
result = true;
return result;
}
public static void main(String[] args) throws Exception{
BufferedReader cin, fin;
cin = new BufferedReader(new InputStreamReader(System.in));
//Description
System.out.println("Programmer: Minh Nguyen");
System.out.println("Description: This program is to start the final project.");
System.out.println();
String nameIn, nameOut, deIn, deOut;
nameIn="";
nameOut="";
deIn = "fileContainingEmails.txt";
System.out.print("Enter input filename [default:" + deIn + "]: ");
nameIn = cin.readLine();
if(nameIn.compareTo("")==0){
nameIn = deIn;
deOut = "copyPasteMyEmails.txt";
System.out.print("Enter output filename [default:" + deOut + "]: ");
nameOut = cin.readLine();
if(nameOut.compareTo("")==0)
nameOut = deOut;
}
else if(nameIn.compareTo("")>0){
deOut = nameIn;
System.out.print("Enter output filename [default:" + deOut + "]: ");
nameOut = cin.readLine();
if(nameOut.compareTo("")==0)
nameOut = nameIn;
}
fin = new BufferedReader(new FileReader(nameIn));
//Read the input file
while(true)
{
if(!fin.ready()) break;
String lineFromFile;
lineFromFile = fin.readLine();
int s, e, hasDot;
for (int i = 0; i < lineFromFile.length(); i++) // for each char in the string...
{
if(lineFromFile.charAt(i)=='@')
{
for(s=i;s>-1;s--)
{
if(isValidEmailCharacter(lineFromFile.charAt(s))==false)
for(e=1; e< lineFromFile.length(); e++)
{
if(isValidEmailCharacter(lineFromFile.charAt(e))==false)
{
String anEmail = lineFromFile.substring(s+1, e);
System.out.println(anEmail);
break;
}
}
}
}
}
}
fin.close();
PrintWriter fout;
fout = new PrintWriter(new FileWriter(nameOut));
fout.close();
}
}
import java.io.*;
公共类邮件13
{
静态布尔值IsValidMailCharacter(字符c)
{
布尔结果=假;
如果((c>='A'&&c='A'&&c='0'&&c0){
deOut=nameIn;
System.out.print(“输入输出文件名[默认值:+deOut+”]:”;
nameOut=cin.readLine();
if(nameOut.compareTo(“”==0)
nameOut=nameIn;
}
fin=新的BufferedReader(新的文件读取器(nameIn));
//读取输入文件
while(true)
{
如果(!fin.ready())中断;
字符串lineFromFile;
lineFromFile=fin.readLine();
int s,e,hasDot;
for(int i=0;i-1;s--)
{
if(isValidMailCharacter(lineFromFile.charAt))==false)
对于(e=1;e
由于数组是基于零的索引,因此您的lineFromFile.substring(s+1,e)
引发了一个错误
for(s=i;s>-1;s--){
//lines of code
String anEmail = lineFromFile.substring(s+1, e)
对于i=lineFromFile.length
因为它将转换为
lineFromFile[i+1]
,其中lineFromFile[i]
是最后一个元素。假设一行有10个字符。因此i
循环从0到9
然后有一个s
循环,从i
到0
在其中,您可以访问`linefromFile.subString(s+1)
所以当
i
为9时,您的s
循环从9开始,您尝试访问索引9+1,即索引10,它在您的行之外。但即使我使用字符串anEmail=lineFromFile.substring(s,e),它仍然失败,错误为:StringIndex超出范围:-8,错误行为。如何修复此问题?但即使使用字符串anEmail=lineFromFile.substring(s,e),它仍然失败,错误为:StringIndex超出范围:-8,错误行为。如何修复此问题?