Unity случайные символы в строке

#c# #string #unity3d #random #char

#c# #строка #unity3d #Случайный #символ

Вопрос:

Как мне повторить генерацию случайного символа? Я хочу создать эффект искаженного текста, поэтому я установил:

 textbox.text = st[Random.Range(0, st.Length)];
 

в моем методе обновления. Однако я получаю только один символ из этой строки — как мне повторить этот процесс в строке длиной 5? Чего я пытаюсь добиться, так это случайной генерации 5 символов снова и снова. Должен быть лучший способ, чем этот:

 randomChar   randomChar   randomChar   randomChar   randomChar
 

Заранее благодарю вас!

Комментарии:

1. Ну, это всегда приводило бы к появлению 5 одинаковых символов. Как ААААА, что ты пробовал

2. Существует String() ctor, который принимает символ и возвращает его строку, повторяющуюся n раз.

3. Можете ли вы привести несколько примеров того, как будут выглядеть ваши строки до сбоев и после сбоев?

Ответ №1:

Можно было бы использовать что-то подобное:

  public static readonly char[] CHARS = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
    static void Main(string[] args)
    {
        
        static string GenerateGlitchedString(uint wordCount,uint wordslength)
        {
            string glitchedString = "";

            for (int i = 0; i < wordCount; i  ) 
            {
                for (int j = 0; j < wordslength; j  ) 
                {
                    Random rnd = new Random();
                    glitchedString  = CHARS[rnd.Next(CHARS.Length)];
                }
                glitchedString  = " "; //Add spaces
            }
            return glitchedString;
        }

        string output = GenerateGlitchedString(5, 5);
        Console.WriteLine(output);
    }
 

Ответ №2:

Вы можете использовать Linq для генерации любого количества случайных символов из перечисляемого:

 int howManyChars = 5;
var newString = String.Join("", Enumerable.Range(0, howManyChars).Select(k => st[Random.Range(0, st.Length)]));
textbox.text = newString;
 

Ответ №3:

Если вам нужны полностью глючные строки, идите по пути Mojibake . Возьмите строку, преобразуйте ее в одну кодировку, а затем декодируйте ее по-другому. Большинство программистов в конечном итоге знакомятся с такого рода сбоями. Например, этот код:

 const string startWith = "Now is the time for all good men to come to the aid of the party";
var asBytes = Encoding.UTF8.GetBytes(startWith);
var glitched = Encoding.Unicode.GetString(asBytes);
Debug.WriteLine(glitched);
 

последовательно приводит к:

 潎⁷獩琠敨琠浩⁥潦⁲污潧摯洠湥琠潣敭琠桴⁥楡⁤景琠敨瀠牡祴
 

Но, если вам просто нужен текст с некоторыми случайными сбоями, как насчет чего-то подобного. Он использует набор символов, которые должны быть вставлены, подсчитывает, сколько сбоев должно быть в строке (в зависимости от длины строки), а затем случайным образом вставляет сбои:

 private static Random _rand = new Random();
private const string GlitchChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%amp;";
public static string GlitchAString(string s)
{
    var glitchCount = s.Length / 5;
    var buffer = s.ToCharArray();
    for (var i = 0; i < glitchCount;   i)
    {
        var position = _rand.Next(s.Length);
        buffer[position] = GlitchChars[_rand.Next(GlitchChars.Length)];
    }

    var result = new string(buffer);
    Debug.WriteLine(result);
    return resu<
}
 

Первые два раза, когда я запускал это (с той же Now is the time... строкой), я получил:

 Original String:
    Now is the time for all good men to come to the aid of the party
First Two Results:
    LowmiW HhZ7time for all good mea to comX to ths aid oV the p1ray
    Now is fhO P!me forjall gKod men to @ome to the a@d of F5e Nawty
 

Алгоритм, в некоторой степени, настраивается. У вас может быть больше или меньше сбоев. Вы можете изменить набор символов сбоев — все, что пожелаете.