C# Случайное разделение строк - PullRequest
0 голосов
/ 02 августа 2020

У меня есть такая строка:

string str = "ABCDEFGHI"

Мне нужен результат, например:

string str1 = "AB";
string str2 = "CDEF";
string str3 = "G";
string str4 = "HI";

Идея состоит в том, чтобы случайным образом разбить строку на последовательность подстрок случайной длины .

Я пробовал следующее:

public static string SplitString(string input)
    {
        string result = "";
        int j = 0;
        for (int i = 0; i < input.Length; i++)
        {
            Random random = new Random();
            j = random.Next(i+1, input.Length);
            string subString = input.Substring(i,j); //ERROR
            i = j-1;
            Console.WriteLine("New substring: " + subString);
            result = result + subString;
        }
        return result;
    }

Похоже, этот подход совсем не правильный, потому что когда я создаю подстроку и индекс i больше, чем j , программа переходит в исключительную ситуацию.

Есть ли способ избежать этой ошибки?

1 Ответ

2 голосов
/ 02 августа 2020

Substring (Int32, Int32) извлекает подстроку длины j, начиная с индекса i, которая прерывается, как только i + j> = input.Length - i истинно.

Пример: Substring (2,2 ) применительно к "ABCDEF" должно вернуть "CD". В вашем конкретном случае c можно было бы иметь что-то вроде Substring (4,5), генерирующее исключение, поскольку в String недостаточно элементов. В какой-то момент l oop всегда будет вызывать исключение.

Более подробную информацию об использовании Substring можно найти здесь: https://docs.microsoft.com/en-us/dotnet/api/system.string.substring?view=netcore-3.1

Некоторые вещи вы может исправить:

  • Сгенерировать случайное число в 1 для ввода. Длина - i вместо 1 для ввода. Длина
  • Установить i = i + j - 1 вместо i = j - 1

Алгоритм:

  1. Шаг
  • i = 0
  • Случайным образом прокрутите j в 0, чтобы (input.Length-1)
  • Вывести первые j букв, начиная с индекса i.
  • Установить i = i + j - 1
Шаг
  • i = j
  • Случайным образом переверните j в 0 до (input.Length-1 - i)
  • Выведите первые буквы j начиная с индекса i.
  • Установить i = i + j - 1
Продолжить
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...