2

我需要生成数百个包含中文和日文字符的随机字符串用于测试目的。是否有任何 C# 库可以帮助解决这个问题。

更多细节:我找到了一个小工具http://string.uttool.com/default.aspx,它可以从几个预定义的字符集生成字符串。任何人都知道它是如何工作的,它的生成逻辑是用 JS、C# 还是 Java 编写的?

4

2 回答 2

2
IEnumerable<string> GetRandomStrings(int numberOfExpectedStrings, int minLength, int maxLength, Random randomizer)
{
    var abecedary = new char[] { 'a', 'b' };
    var strings = new List<string>();

    for (int i = 0; i < numberOfExpectedStrings; i++)
    {
        int lengthOfString = randomizer.Next(minLength, maxLength);
        var newString = new StringBuilder(lengthOfString);
        for (int k = 0; k < lengthOfString; k++)
        {
            int randomCharPosition = randomizer.Next(0, abecedary.Length);
            newString.Append(abecedary[randomCharPosition]);
        }
        strings.Add(newString.ToString());
    }

    return strings;
}

将 abecedary 替换为您选择的一组中文或日文字符。

于 2013-09-02T15:29:55.310 回答
2

要生成字符串,您可以尝试使用此函数:

    private static string GenerateString(int length, int minCharCode, int maxCharCode)
    {
        var builder = new StringBuilder(length);
        var random = new Random();
        for (var i = 0; i < length; i++)
        {
            builder.Append((char) random.Next(minCharCode, maxCharCode));
        }
        return builder.ToString();
    }

minCharCodemaxCharCode设置您的 unicode 字符范围。你可以调用这个函数数百次。如果你想要一个可变长度的字符串,你可以在每次调用时随机化长度参数。用法:

    static void Main(string[] args)
    {
        const int minJpnCharCode = 0x4e00;
        const int maxJpnCharCode = 0x4f80;
        var random = new Random();
        for (int i = 0; i < 10000; i++)
        {
            Console.WriteLine(GenerateString(random.Next(0, 50), minJpnCharCode, maxJpnCharCode));                
        }
        Console.ReadLine();
    }

更新 中文和日文字符在 unicode 中有很多范围。您可以从这里获取 日语或仅使用谷歌。比你需要下一个代码:

    /// <summary>
    /// Represents our characters range
    /// </summary>
    class Range
    {

        public int Begin { get; set; }

        public int End { get; set; }

        public Range(int begin, int end)
        {
            Begin = begin;
            End = end;
        }

    }

我们的发电机:

    private static string GenerateString(int length, IList<Range> ranges) 
    {
        var builder = new StringBuilder(length);
        var random = new Random();
        for (var i = 0; i < length; i++)
        {
            var rangeIndex = random.Next(ranges.Count);
            var range = ranges[rangeIndex];
            builder.Append((char)random.Next(range.Begin, range.End));
        }
        return builder.ToString();
    }

用法:

        var ranges = new[]
        {
            new Range(0x4e00, 0x4f80),
            new Range(0x5000, 0x9fa0),
            new Range(0x3400, 0x4db0),
            new Range(0x30a0, 0x30f0), 
            // and so on.. add any range here
        };
        for (var i = 0; i < 10000; i++)
        {
            Console.WriteLine(GenerateString(random.Next(0, 50), ranges));
        }
于 2013-09-02T16:24:00.387 回答