2011-12-21 26 views
0

我想讓這個句子出來。因爲它給我 java.lang.ArrayIndexOutOfBoundsException如何反轉任何字符串中的任意中間字符,並將第一個字符和最後一個字符相同

package first; 

import org.apache.commons.lang.RandomStringUtils; 


public class reverseString2 { 

public static void main(String []args){ 



     String str = "The student so lazy"; 
     String[] split = str.split(" "); 
     String middle = null; 
     StringBuilder output = new StringBuilder(); 

     for (String s : split) { 
      middle = s.substring(1, s.length()-1); 
      s = s.replace(middle,RandomStringUtils.random(5, middle)); 
      output.append(s + " "); 
     } 

     System.out.println(output.toString()); 
    } 



} 
+0

我希望它是「像這樣lzay sdetunt」或任何隨機混合不正常的反轉 – Weloo 2011-12-21 15:43:46

+0

你試過調試它嗎?找出哪一行失敗,在該行上放置一個斷點,並檢查相關變量。你應該能夠理解ArrayIndexOutOfBoundsException來自哪裏。 – 2011-12-21 15:46:37

+0

我不認爲'RandomStringUtils.random(int,String)'做你認爲它做的事。你可以很容易地用它來「'snnnnnt so lzzy」。 – corsiKa 2011-12-21 15:47:01

回答

1

您需要複製並粘貼確切的堆棧跟蹤。

我寫我自己的隨機方法,因爲我沒有這臺機器上的最佳設置,這裏就是我的了:

import java.util.*; 
class reverseString2 { 

public static void main(String []args){ 



     String str = "The student so lazy"; 
     String[] split = str.split(" "); 
     String middle = null; 
     StringBuilder output = new StringBuilder(); 

     for (String s : split) { 
      middle = s.substring(1, s.length()-1); 
      s = s.replace(middle,random(5, middle)); 
      output.append(s + " "); 
     } 

     System.out.println(output.toString()); 
    } 

    static String random(int i, String s) { 
     char[] ca = s.toCharArray(); 
     List<Character> list = new ArrayList<Character>(); 
     for(char c : ca) list.add(c); 
     Collections.shuffle(list); 
     StringBuilder sb = new StringBuilder(); 
     for(Character ch : list) sb.append(ch); 
     return sb.toString(); 
    } 

} 

結果:

# 1: hide clone input 2 seconds ago 
result: success  time: 0.09s memory: 212416 kB  returned value: 0 

input: no 
output: 
The suntedt so lzay 

鏈接http://ideone.com/5flnU

1

你的代碼,除非少於3個字符的話就不會有什麼問題什麼是錯在這裏。您不能在第一個字符之後開始並檢索下一個0(或更少)的字符。

+0

它可能無法正常工作,但它不應該失敗,並帶有異常。 – corsiKa 2011-12-21 15:45:05

+0

同意,但沒有堆棧,這是最好的假設。其餘的代碼沒有問題。 – 2011-12-21 15:46:47

+0

對於長度爲3的字符串,它也應該「不工作但不失敗」。第一個和最後一個將保持不變,並且中間將是長度1,否定任何隨機化。 – corsiKa 2011-12-21 15:48:30

相關問題