Используйте класс Случайный , чтобы сгенерировать случайное целое число для выбора индекса символов.
String text = "ax 5 5 dx 3 acc c ax bx";
System.out.println("Original: " + text);
String[] tokens = text.split(" ");
List<Integer> symbols = new ArrayList<Integer>();
for(int i=0; i<tokens.length; i++) {
try {
Integer.parseInt(tokens[i]);
} catch (Exception e) {
symbols.add(i);
}
}
Random rand = new Random();
// this is the part you can do multiple times
int source = symbols.get((rand.nextInt(symbols.size())));
int target = symbols.get((rand.nextInt(symbols.size())));
tokens[target] = tokens[source];
String result = tokens[0];
for(int i=1; i<tokens.length; i++) {
result = result + " " + tokens[i];
}
System.out.println("Result: " + result);
Сделайте столько замен, сколько вам нужно до вы присоедините токены обратно.
Здесь есть две части, которые могут показаться сложными. Во-первых, попытка catch идентифицирует те токены, которые не являются целыми числами. Я рекомендую вам использовать эту часть в своем собственном методе, поскольку она работает, но она немного хакерская.
Во-вторых, я устанавливаю переменные source
и target
. То, что я делаю там, это получение случайно выбранного индекса одного из нечисловых символов. Если у меня есть два случайных индекса, я могу поменять их местами в следующей строке.
Альтернативой может быть создание новой строки из случайно выбранных символов после разделения исходной строки на массив.