2016-04-15 2 views
-2

Я ищу, чтобы переключить 2 случайных символа в строке. Например, если я начинаю с «abcdef», я бы хотел, чтобы компьютер сгенерировал 2 случайных числа и переключил 2 символа. Таким образом, возможным результатом может быть «afcdeb».Как вы переключаете две случайные буквы в строке в java?

+0

Что код, который вы пробовали? – Gunaseelan

ответ

0
  1. получить длину строки
  2. получить 2 разных ИНТ случайных чисел от 0 до длины строки: rand1 и rand2.
  3. Я думаю, вы должны преобразовать строку в массив символов.
  4. Сделайте обмен в массиве с 2 случайными числами.
  5. Преобразование массива в строку.
0

Вы можете использовать следующий подход, используя 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(); 
+0

Жаль, что это боль, но есть ли способ сделать это без StringBuilder? –

+0

Есть путь. Вы объединяете подстроку и создаете новую строку. Но код будет немного сложным. Как в [this] (http://stackoverflow.com/questions/6952363/replace-a-character-at-a-specific-index-in-a-string) вопрос –

0

Генерация случайных чисел INDEX1 и index2 между 0 и (длина строки -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()); 
+0

Это возвращает ошибку в String charSwap1 = str. подстрока (index1, index1 + 1); Строка charSwap2 = str.substring (index2, index2 + 1); Индекс находится за пределами допустимого диапазона –

+0

startIndex включен, тогда как endIndex является исключительным .. Он не должен возвращать какую-либо ошибку, поскольку индекс + 1 будет 2 в вашем случае, а index2 + 1 должен быть 6, который находится в пределах диапазона строк. Вы получаете ошибку для charSwap2 или charSwap1 ?? Если для charSwap2 используйте это вместо этого. str.substring (index2), если это последний символ. – annu

Смежные вопросы