2013-05-31 92 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 +「|」);'所以你可以確定你會看到任何空間。 –