2012-10-12 90 views
0

我已經作出了計劃,扭轉了輸入字符串的話中 有一個錯誤代碼:字符串IndexOut在java中越界異常錯誤

    Exception in thread "main" java.lang.StringIndexOutOfBoundsException:String index out of range: 17 
        at java.lang.String.charAt(String.java:695) 
        at Rev.main(Rev.java:14) 

主程序代碼是:

import java.io.*; 
class Rev 
{ 
public static void main(String args[])throws IOException 
    { 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("Enter String"); 
    String a=br.readLine(); 
    a=" "+a+" "; 
    int x=a.length(); 
    String b; 
    for(int z=a.length()-1;z>=0;z--) 
    { 
    if (a.charAt(z)==' ') 
    { 
     b=a.substring(z,x); 
     System.out.print(b+" ");  
     a=a.replace(b,""); 
    } 
    } 
    } 

}

+8

您不應該修改for循環中的'a',因爲條件是基於它的。 – talnicolas

+1

您可能會發現StringBuilder是一個更好的起點。 –

+0

[這裏是一些討論](http://stackoverflow.com/questions/859562/whats-the-best-way-to-recursively-reverse-a-string-in-java)關於這個主題的多個實現例子你可能會發現有幫助。 –

回答

0

也許你應該試試:

int x=a.length()-1; 

的子導致錯誤

0

你爲什麼不陣列中的分裂受到空間和存儲輸入和扭轉陣列?

+0

這是一個問題,而不是答案。 (好建議,但你應該顯示代碼並鏈接到Javadocs,特別是考慮OP的可能技能水平..) – millimoose

0

你知道你指定的字符串索引是錯誤的。你知道錯誤發生的地方。添加System.out.println調用可以在錯誤語句之前以及代碼中的其他關鍵點上打印sting索引和字符串的長度。調試問題。

0

嗯,我知道這是不是在回答你的問題,但你爲什麼不嘗試的StringBuilder或StringBuffer的方法知道的反向()

StringBuilder sb = new StringBuilder("Hello"); 

sb.reverse(); 
1

如果Java專業爲您解決問題所需要,他倒是做到在短短的幾行:

final List<String> words = Arrays.asList(input.split(" ")); 
Collections.reverse(words); 
for (String word : words) System.out.print(word + " "); 
System.out.println(); 

如果你這樣做是爲鍛鍊; Tibial,並希望自己實現它,你仍然可以考慮使用相同的基本思想。例如,遍歷字符串並將空間的所有位置收集到一個List<Integer>。然後使用input.substring(list.get(i), list.get(i-1))向後翻閱該列表。