【问题标题】:Java - Mix up lettersJava - 混淆字母
【发布时间】:2014-12-02 16:16:49
【问题描述】:

在你打乱字母之前,谁能给我一个如何拆分字符串的例子

我可以打乱单词,但它也会改变单词的长度

例子:

输入:你好,我叫乔恩

输出:e imanoJs my nlolHe

但应该是这样的

输入:你好,我叫乔恩

输出:Hlelo my nmae is 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;
    }
}

【问题讨论】:

    标签: java string split shuffle


    【解决方案1】:

    注意事项

    • 将 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();
    }
    

    【讨论】:

    • 也许使用 Arrays.asList(word.toCharArray()) 比使用 for-loop 更好。你怎么看?
    • Arrays.asList(word.toCharArray()) 生成一个列表,其中一个元素是数组。 Arrays.asList() 仅适用于 Character 等包装类型,不适用于 char。
    【解决方案2】:

    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();
    

    【讨论】:

      【解决方案3】:

      你应该把句子分成单词,然后打乱单词:

      String[] words = sentence.split(" ");
      
      for(String word : words)
         word = shuffle(word);
      

      然后将单词连接成一个句子。

      【讨论】:

      • 修改 word 什么都不做,你必须连接到一个在 for 循环之外声明的字符串。
      猜你喜欢
      • 2016-07-19
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2017-05-16
      • 1970-01-01
      相关资源
      最近更新 更多