【问题标题】:How do you switch two random letters in a string in java?如何在java中切换字符串中的两个随机字母?
【发布时间】:2016-04-15 04:20:09
【问题描述】:

我希望在一个字符串中切换 2 个随机字符。例如,如果我以“abcdef”开头,我希望计算机生成 2 个随机数,并切换 2 个字符。所以一个可能的结果可能是“afcdeb”。

【问题讨论】:

  • 你试过的代码是什么?

标签: java string random swap chars


【解决方案1】:
  1. 获取字符串的长度
  2. 获取 0 和字符串长度之间的 2 个不同的 int 随机数:rand1 和 rand2。
  3. 我认为您应该将字符串转换为字符数组。
  4. 用 2 个随机数在数组内进行交换。
  5. 将数组转换为字符串。

【讨论】:

    【解决方案2】:

    您可以通过 StringBuilder 使用以下方法。

    String string="Your String";
    int length=string.length();
    
    Random rand=new Random();
    int one=0;
    int two=0;
    /*
    generate two random indexes which are not equal to each other.
    */
    while(length>=2 && one==two){
        one=rand.nextInt(length);
        two=rand.nextInt(length);
    }
    
    //use String builder and interchange the characeters.
    StringBuilder builder=new StringBuilder(string);
    builder.setCharAt(one,string.charAt(two));
    builder.setCharAt(two,string.charAt(one));
    
    String newString=builder.toString();
    

    【讨论】:

    • 很抱歉很痛苦,但是没有StringBuilder有没有办法做到这一点?
    • 有办法的。您连接子字符串并创建新字符串。但是代码会有点复杂。如this问题
    【解决方案3】:

    生成0到(字符串长度-1)之间的随机数index1和index2

    int index1= randomNumber1;
    int index2= randomNumber2;
    
    String str ="abcdef";
    String charSwap1= str.substring(index1, index1+1);
    String charSwap2= str.substring(index2, index2+1);
    StringBuilder builder=new StringBuilder();
    builder.append(str);
    builder.replace(index1,index1+1,charSwap2);
    builder.replace(index2,index2+1,charSwap1);
    System.out.println(builder.toString());
    

    【讨论】:

    • 这会在 String charSwap1= str.substring(index1, index1+1); 中返回错误String charSwap2= str.substring(index2, index2+1);索引超出范围
    • startIndex 是包容性的,而 endIndex 是独占性的。它不应该返回任何错误,因为在您的情况下 index+1 将为 2 而 index2+1 应该为 6,这在字符串范围内。您是否收到 charSwap2 或 charSwap1 错误?如果对于 charSwap2,请改用它。 str.substring(index2) 如果是最后一个字符。
    猜你喜欢
    • 1970-01-01
    • 2015-07-05
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多