我需要生成数百个包含中文和日文字符的随机字符串用于测试目的。是否有任何 C# 库可以帮助解决这个问题。
更多细节:我找到了一个小工具http://string.uttool.com/default.aspx,它可以从几个预定义的字符集生成字符串。任何人都知道它是如何工作的,它的生成逻辑是用 JS、C# 还是 Java 编写的?
我需要生成数百个包含中文和日文字符的随机字符串用于测试目的。是否有任何 C# 库可以帮助解决这个问题。
更多细节:我找到了一个小工具http://string.uttool.com/default.aspx,它可以从几个预定义的字符集生成字符串。任何人都知道它是如何工作的,它的生成逻辑是用 JS、C# 还是 Java 编写的?
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 替换为您选择的一组中文或日文字符。
要生成字符串,您可以尝试使用此函数:
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();
}
minCharCode和maxCharCode设置您的 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));
}