2011-12-21 8 views
0

この文を好きにしたい。それはあなたのコードは以下の3つの文字を含む単語を除いてすべてのために働くだろう私に 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

私はそれが "sdetunt so lzay"であるか、ランダムに混ざった普通の逆であることを望みます – Weloo

+0

それをデバッグしようとしましたか?失敗した行を見つけ出し、その行にブレークポイントを置き、関連する変数を調べます。 'ArrayIndexOutOfBoundsException'がどこから来ているのかを理解できるはずです。 –

+0

'RandomStringUtils.random(int、String)'とは思っていません。あなたは簡単に '' snnnnnt so lzzy ''を簡単に得ることができます。 – corsiKa

答えて

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

を与えるので、ここでは何が問題です。最初の文字の後には始めることができず、次の0個(またはそれ以下)の文字を検索することはできません。

+0

それは動作しないかもしれませんが、例外で失敗してはいけません。 – corsiKa

+0

合意されていますが、スタックはありません。コードの残りの部分に問題はありません。 –

+0

長さ3の文字列の場合は、 'うまくいかないが失敗しない'べきである。最初と最後は同じままであり、中間は長さ1になり、ランダム化を否定する。 – corsiKa

関連する問題