我有一个13个字符的字符串。 8C4B99823CB9C。 我将它分配给一个字符串。
string serialNumber = "8C4B99823CB9C";
然后该字符串输入方法
GenerateCode(proxy, serialNumber, product);
在这个方法中我有这条线......
codeSerial = serial_no.Substring(serial_no.Length - codeSerialLength, codeSerialLength);
在手表中,这显示长度为15。
这是完整的代码
[TestMethod]
public void CanGenerateCodeNumberWithPrefixWithHEX()
{
string serialNumber = "8C4B99823CB9C";
Entity product = new Entity();
product.Attributes["piv_codeseriallength"] = 8;
product.Attributes["piv_codeprefix"] = "G";
string result = GenerateCode(proxy, serialNumber, product);
string expected = "G9823CB9C";
Assert.AreEqual(expected, result, "The Code was not generated correctly");
}
public static string GenerateCode(IOrganizationService _service, string serial_no, Entity product)
{
string codeSerial = null;
//Serial Length
if (product.Attributes.ContainsKey("piv_codeseriallength"))
{
codeSerial = serial_no;
int codeSerialLength = product.GetAttributeValue<int>("piv_codeseriallength");
codeSerial = serial_no.Substring(serial_no.Length - codeSerialLength, codeSerialLength);
string prefix = product.Attributes.ContainsKey("piv_codeprefix") ? product.GetAttributeValue<string>("piv_codeprefix") : "";
codeSerial = prefix + codeSerial;
}
return codeSerial;
}
此单元测试失败,因为它认为字符串长度为15个字符,因此采用了错误的字符串部分
答案 0 :(得分:2)
答案 1 :(得分:2)
您的字符串中隐藏了unicode字符。找到的一个好方法是将完整的字符串复制并粘贴到文本编辑器中,然后尝试沿着字符串左右移动插入符号。你会看到你需要在引号周围向左或向右按两次,这意味着有更多的角色然后会满足你的需求。当然,另一种方法是在十六进制编辑器中打开字符串。
假设您只需要简单的字符,您可以使用正则表达式清理输入,以删除多余的字符:
var sanitizedInput = Regex.Replace(input, @"[^\w:/ ]", string.Empty);