如何在java中的字符串中切换两个随机字母?
我期待切换字符串中的2个随机字符。例如,如果我以“abcdef”开头,我希望计算机生成2个随机数字,并切换2个字符。所以一个可能的结果可能是“afcdeb”。如何在java中的字符串中切换两个随机字母?
- 获得字符串的长度
- 得到2个不同的随机INT之间0和数字的字符串的长度:RAND1和RAND 2。
- 我想你应该将字符串转换为一个字符数组。
- 使用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](http://stackoverflow.com/questions/6952363/replace-a-character-at-a-specific-index-in-a-string)问题 –
生成0之间的随机数索引1和索引2和(字符串-1的长度)
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是独占性的。它不应该返回任何错误,因为在您的情况下索引+ 1将是2,并且index2 + 1应该是6,它在字符串范围内。你是否遇到charSwap2或charSwap1错误?如果是charSwap2,则改为使用它。 str.substring(index2)如果它是最后一个字符。 – annu
什么是你的代码试过吗? – Gunaseelan