我正在尝试获取具有\\\
值的字符串的长度。
例如
"C:\\\Dir1\\\Dir2\\\Dir3\\\Dir4\\\flower.bmp"
该示例的长度为 38 个字符。
当我使用长度属性时,长度为 33,基本上它被\\\
视为一个字符。
我尝试过使用StringInfo.LengthInTextElements
和其他各种方法来尝试使其正常工作,但没有任何乐趣。
由于字符\
用于对字符串中的字符进行转义,因此实际上从字面上\\
表示字符。\
如果您想\\
被视为两个字符,请尝试逐字字符串:
@"C:\\Dir1\\Dir2\\Dir3\\Dir4\\flower.bmp"
它是一个字符。如果您希望它是 2 个字符,请在开头使用 @ 或使用 \\ 两次(还没有尝试过..现在检查)
我的直觉说您有一个更根本的问题,但是您是否尝试过将其包装为文字字符串?
string myString = @'C:\\Dir1\\Dir2\\Dir3\\Dir4\\flower.bmp'
这是因为\\
在 C# 中字符串被称为转义序列。您在代码中的字符串:
"C:\\Dir1\\Dir2\\Dir3\\Dir4\\flower.bmp"
当程序加载时,在磁盘和内存中变成这个字符串。
"C:\Dir1\Dir2\Dir3\Dir4\flower.bmp"
所以,你的例子的长度确实是33 个字符。原始字符串虽然在代码中可能是 38 个字符,但仅代表 33 个实际字符。
33 是正确的——\\
确实只有一个字符,即\
。只有调试器显示它已转义(例如,分别对or 、换行和回车\
具有特殊含义)。\n
\r
反斜杠\
是一个转义字符,用于将特殊字符放入字符串中,例如\t
制表符和\n
换行符。双反斜杠\\
将在编译后的字符串中插入一个反斜杠,而不是预期的 2。答案是@
在字符串前面使用 c# 功能,以防止转义或转义所有反斜杠,这看起来像"C:\\\\Dir1\\\\Dir2\\\\Dir3\\\\Dir4\\\\flower.bmp"