2013-05-31 81 views
0

我正在尝试翻转一个句子。 (如果句子是“我是一只猫”,那么结果应该是“我是我”)问题是我得到一个索引超出界限的错误,我不知道如何解决这个问题。不确定我的索引是否错误或者子串部分是否错误。我只是Java的初学者,所以任何帮助都非常感谢。错误:字符串索引超出范围:-1java字符串索引越界错误

感谢

public class ReverseWords { 

    public static void main(String [] args){ 
     Scanner in = new Scanner(System.in); 
     System.out.print("Enter File Name: "); 
     String fileName = in.nextLine(); 
     File f = new File(fileName); 
     try { 
      Scanner input = new Scanner(f); 
      int x = 1; 
      int n = input.nextInt(); 
      while (x<n) { 
       String line = input.nextLine(); 
       Queue<String> q = new LinkedList<String>(); 
       q.add(line); 
       int ws = line.indexOf(" "); 
       String word = line.substring(0,ws); 
       ArrayList<String> a = new ArrayList<String>(); 
       while (line.length() > 0) { 
        a.add(word); 
        q.remove(word); 
       } 
       System.out.println("Case #" + x); 
       for (int i = a.size(); i != 0; i--) { 
        System.out.print(a.get(i)); 
       } 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

你究竟在哪里得到错误?在提问时试着更具体。此外,为什么在你的for语句中'i!= 0'而不是'i> 0'? –

+1

说真的,你应该重新命名你的变量,以便为将来的读者减轻代码的可读性(记住你在几天/几周/几月内也会成为未来的读者)。 –

+0

对不起... for循环是反向读取的,对吗?我试图打印反向 – XcutionX

回答

1

String Java文档:

public int indexOf(int ch)

...

If no such character occurs in this string, then -1 is returned.

是你有没有空白的准备?

例如在最后一次迭代 ...

但它看起来像有其他错误,太。

+0

ahhh ...非常感谢...所以句子的最后一个词将不包含空格。 – XcutionX

+1

顺便说一下,'split()'是一个不错的方法。 –

0

您的问题将与类似下面的一行:

int ws = line.indexOf(" "); 
String word = line.substring(0,ws); 

每当indexOf没有找到它的寻找,它将返回-1。如果您尝试在字符串上使用该索引,则您将索引为-1,这是超出范围。

它看起来像你试图找到一个没有空间的行中的空间。

+0

我有这个文件,第一个单词后面有空格 – XcutionX

+0

@XcutionX在调试器中运行你的程序,并检查循环的每一次迭代期间变量'line'是否包含空格。 –

+0

@XcutionX如果您不知道如何使用调试器,则可以在出现错误之前立即在控制台中打印行内容。做一些像'System.out.print(“|”+ line +“|”);'所以你可以确定你会看到任何空间。 –