我正在尝试使用以下方法生成一个包含8个字符的随机字符串,并且它工作正常,但这只是一个小问题。
当我将字符串打印到屏幕并将其从IE复制到记事本时,有时会在字符串中间添加短划线( - )。是什么导致这种情况以及如何解决?
它不会发生很多,可能是1/10次,但仍然会弄乱弦。
public string generateString()
{
int length = 8;
string str = "";
string chars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ123456789";
int charsCount = chars.Length;
Random random = new Random();
for (int i = 0; i < length; i++)
{
str += chars[random.Next(0, charsCount)];
}
return str;
}
答案 0 :(得分:8)
您展示的代码不会对字符串添加任何奇怪的内容。也许这就是你复制和粘贴导致问题的方式。如果它偶尔会导致问题,请查看HTML源代码(右键单击,查看源代码),看看是否可以在那里看到问题。
编辑:正如Henk发现的那样,你的代码显然不是全部。您是如何在源代码中以奇怪的字符开头的?话虽如此,我肯定会对您的代码进行更改:
Random
作为参数,因此您可以快速连续多次调用它,而不会多次生成相同的字符串只是想知道它会是什么样子 - 在这个例子中,我没有将字符集转换为参数,但是我从方法中提取了它:
private const string ValidCharacters =
"abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
public static string GenerateString(Random random, int length)
{
// TODO: Argument validation
char[] chars = new char[length];
for (int i = 0; i < chars.Length; i++)
{
chars[i] = ValidCharacters[random.Next(ValidCharacters.Length)];
}
return new string(chars);
}
答案 1 :(得分:6)
稍微戳了一下后,下面的一行不是它看起来的样子。在字母H和J之间还有另一个字符#173或­
,它不会在FireFox或Chrome中显示。但IE用户可以在这里看到它:
string chars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ123456789";
因此,要快速解决它,只需重新键入chars
的 HJK 部分。