Java - 混合字母

时间:2014-12-02 16:16:50

标签: java string split shuffle

有人可以给你一个如何在你加扰字母之前拆分字符串的例子

我可以加扰这些词,但它也改变了词的长度

示例:

  

输入:您好,我的名字是Jon

     

输出:e imanoJs my nlolHe

但它应该是这样的

  

输入:您好,我的名字是Jon

     

输出:Hlelo my nmae是Jon

所以第一封和最后一封信应该留在原地

这是我到目前为止的代码

public class MixUp{
    public static void main(String[] args){
        String cards="Hello my Name is Jon, nice to meet you";
        System.out.println("Input String = " + cards);
        cards = shuffle(cards);
        System.out.println("Shuffled String = " + cards);
     }

    static String shuffle(String cards){
        if (cards.length()<=1)
            return cards;

        int split=cards.length()/2;

        String temp1=shuffle(cards.substring(0,split));
        String temp2=shuffle(cards.substring(split));

        if (Math.random() > 0.5) 
            return temp1 + temp2;
        else
            return temp2 + temp1;
    }
}

3 个答案:

答案 0 :(得分:1)

inputString.split(" ")将拆分空格并返回一个字符串数组。创建一个新数组,遍历第一个拆分数组并随机播放每个字符串,并将混洗后的字符串添加到新数组中。

String cards="Hello my Name is Jon, nice to meet you";
System.out.println("Input String = " + cards);
String[] splt = cards.split(" ");
String[] shuffled = new String[splt.length];
for (int iter = 0; iter < splt.length; iter ++){
    shuffled[iter] = shuffle(splt[iter]);
}
// Now join the array

编辑更好的是使用StringBuilder

String cards="Hello my Name is Jon, nice to meet you";
System.out.println("Input String = " + cards);
String[] splt = cards.split(" ");
StringBuilder sb = new StringBuilder();
for (int iter = 0; iter < shuffled.length; iter ++){
    sb.append(shuffle(splt[iter]) + " ");
}
String shuffled = sb.toString();

答案 1 :(得分:0)

你应该将句子分成单词,然后加扰单词:

String[] words = sentence.split(" ");

for(String word : words)
   word = shuffle(word);

然后把这个词连在一起写成一个句子。

答案 2 :(得分:0)

注释

  • 将Collections.shuffle()与List.subList()结合使用,以便不移动第一个和最后一个字母。
  • 转换为原始数组,以便可以使用Collections.shuffle()

代码

private static String shuffle(String sentence) {
    String[] words = sentence.split("\\s+");
    StringBuilder builder = new StringBuilder();
    for (String word : words) {
        List<Character> letters = new ArrayList<Character>();
        for (char letter : word.toCharArray()) {
            letters.add(letter);
        }
        if (letters.size() > 2) {
            Collections.shuffle(letters.subList(1, letters.size() - 1));
        }
        for (char letter : letters) {
            builder.append(letter);
        }
        builder.append(" ");
    }
    return builder.toString();
}