C# 使用转义字符/特殊字符/格式计算字符串长度

C# 使用转义字符/特殊字符/格式计算字符串长度,c#,string,C#,String,我需要能够读取字符串的文字长度 示例: “\t”将是4 “\t foobar”将是11 String.Format(“\t{0,-15}”,“Hello World”)将是20 如果我只需要编写一个用于制表符和空格的解码器,那么编写一个解码器就很容易了,但是对于第三个例子,我不知道该怎么做。有没有办法强迫字符串在C#中解释自己 谢谢。如果要控制“\t”等于4个空格,为什么不将所有“\t”替换为4个空格 比如: public static void Main(string[] args) {

我需要能够读取字符串的文字长度

示例:

  • “\t”将是4
  • “\t foobar”将是11
  • String.Format(“\t{0,-15}”,“Hello World”)
    将是20
如果我只需要编写一个用于制表符和空格的解码器,那么编写一个解码器就很容易了,但是对于第三个例子,我不知道该怎么做。有没有办法强迫字符串在C#中解释自己


谢谢。

如果要控制“\t”等于4个空格,为什么不将所有“\t”替换为4个空格

比如:

public static void Main(string[] args)
{
    Console.WriteLine(GetLength("\t"));
    Console.WriteLine(GetLength("\t foobar"));
    Console.WriteLine(GetLength(String.Format("\t {0, -15}", "Hello World")));
    Console.WriteLine(GetLength("a\t"));
    Console.ReadLine();
}

private static int GetLength(string str)
{
    return str.Replace("\t", "    ").Length;
}
结果:

4
11
20
5

对于第三个示例,使用这些参数调用
String.Format
,然后使用制表符测量字符串(如果假设使用四个空格制表符,请不要忘记“a\t”和“\t”都是四个字符)。当然,在该分支中,您要查找的制表符将是实际的制表符字符,而不是后跟小写“t”的反斜杠。另一种方法是重新实现
String.Format
,这太疯狂了。“强制字符串解释自身的方法”是
string.Format
\t
的长度始终为1。只有当特定程序将其输出到显示器时,它才会变为不同的外观长度。例如,记事本使用8列作为选项卡;LINQPad使用3个;visualstudio使用4;微软Word使用0.5英寸。所以问题是,计算有效长度的目标显示是什么?如果您只关心制表符(而且总是在开头,假设是4个字符的制表符),那么一个简单的解决方案就是
“字符串”.Replace(“\t”,”).Length
。命令提示符就是我正在使用的显示。我认为一个标签=4个空格。我正在使用String.Replace作为我当前的解决方案,但我想知道是否有更好的方法。我目前的要求只是标签,但不能保证这不会改变。我认为你从根本上混淆了什么是字符串以及程序如何显示字符串。字符串是字符的集合。因为在大多数IDE中很难正确键入制表符,所以我们用
\t
的“转义序列”来表示它。但它位于字符#9(制表符)下面,并且始终是一个字符。包含制表符的字符串是长度为1的字符串。某些软件程序在向终端显示字符串时遇到字符#9时,会发出四个空格,这完全是惯例。@mellamokb您的权利,制表符是它自己的字符,IDE和写出它的程序会将其打印为许多空格。我没有意识到这一点。谢谢。这与我目前用来解决这个问题的方法类似,我仍然很好奇String类中是否有内置的东西,或者某个C#库会给你解释(我一直找不到任何东西),但如果没有,那么这就是它的工作方式。没有,因为没有标准规定
\t
==4个空格-可能更多或更少,或者完全是其他的。我希望可能会使用一些默认值,但我认为您是对的,因为\t是一个变量值,所以这些转义符没有默认解释器。制表符(
\t
)是格式化字符或显示字符。也就是说,它的操作完全取决于解释它的应用程序。是的,VisualStudio和记事本都使用4个空格作为选项卡,但有些程序使用6、2、1!我不确定这是个好主意,因为在你上次的测试中,我认为答案应该是4。制表符往往是可调整的,而不是固定的,因为只有4个字符。