如何随机地反转任何字符串中的任何中间字符并保持第一个和最后一个字符相同

时间:2011-12-21 15:34:52

标签: java

我希望这句话好像。这有什么不对,因为它给了我 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());
    }



}

2 个答案:

答案 0 :(得分:1)

除了少于3个字符的单词外,您的代码适用于所有内容。您无法在第一个字符后启动并检索下一个0(或更少)字符。

答案 1 :(得分: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