怎样知道string输出到控制台后所占的长度,包括tab展开为空格后所占的空间加上其他多字节的字符

qq13833254607 2012-08-06 06:19:22
string a= "a\tb";
Console.WriteLine(a);

a.Length = 3 但是控制台上输出后占9个位置"a b",而还有其他情况像输出汉字或某些奇葩的0长度unicode符号(我现在系统是英文的没法演示这种情况)

我想知道有没有什么好办法能得到console.write实际输出的长度
...全文
194 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq13833254607 2012-08-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

严格的说,LZ的需求其实是不能实现的
[/Quote]
仔细想了下确实实现不了,因为tab的扩展是和当前的光标位置相关的,单从一个字符串里得不到这个信息
bdmh 2012-08-07
  • 打赏
  • 举报
回复
将字符串转为字节数组,数组长度就是实际长度
Encoding.Default.GetBytes("aa这个");
qq13833254607 2012-08-07
  • 打赏
  • 举报
回复
up                                                                         。
Alexander 2012-08-07
  • 打赏
  • 举报
回复
严格的说,LZ的需求其实是不能实现的。因为字符串"a\tb"实际输出的只有'a'、'\t'、'b'三个字符,其中控制符\t在ASCII中的定义为“制表符”,即“将输出位置移到下一个制表位”。而每个制表位的大小在不同的显示环境下可能会有不同的定义。例如,在cmd(严格点说应该是DOS7)和notepad下,每个制表位长度为8,而在VS的编辑器下默认的制表位长度为4。

但如果只限定在控制台(DOS7)下,知道制表位长度为8以后可以自己编程计算其输出长度:
(在下偷懒,只处理了\t的\n两种控制符,如果LZ有兴趣可以自己补充其它常见控制符如\a,\b,\r等的处理代码)


class Program
{
const int TABCOUNT = 8;

static void Main(string[] args)
{
string s = "a\tb\nabc\t123";

Console.WriteLine(s);
Console.WriteLine(GetOutputCount(s));
}

static int GetOutputCount(string str)
{
int count = 0;

foreach (char ch in str)
{
switch (ch)
{
case '\t':
count = TABCOUNT * (count / TABCOUNT + 1);
break;
case '\n':
count = 0;
break;
default:
count += Encoding.Default.GetByteCount(ch.ToString());
break;
}
}

return (count);
}
}
Alexander 2012-08-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

将字符串转为字节数组,数组长度就是实际长度
Encoding.Default.GetBytes("aa这个");
[/Quote]
这个不行。Encoding.Default.GetByteCont()通常用来计算带中文字符串实际输出长度。
(这其实是利用了中文显示的特点:通常的输出环境下,中文字符的输出宽度是英文的2倍。而中文的Unicode也是2字节的(英文字母是1字节)),但是'\t'是控制符,对应的也是1Byte,因此
Encoding.Default.GetByteCount("a\tb")返回的仍然是3。
内容概要:本文档是2025年全国广播电视技术能手竞赛IPTV专业的竞赛内容大纲,旨在指导参赛选手准备比赛。竞赛分为理论和实操两大部分。理论部分涵盖基本知识、基础理论和专业知识,包括法律法规、技术标准、IPTV技术基础、信号传输与分发、网络和数据安全等。实操部分则涉及IPTV系统设备、仪器设备的操作使用和指标测量。具体内容包括IPTV系统架构、传输技术与指标、设备配置及维护、专业技能如测量工具使用、视音频指标测量、直播点播协议分析、播出网络性能测量、网络安全数据分析以及系统故障排查等。 适合人群:从事或有意从事IPTV相关工作的技术人员,尤其是有志于参加全国广播电视技术能手竞赛的专业人士。 使用场景及目标:①帮助参赛选手全面了解并掌握IPTV相关的法规文件和技术标准;②提升选手对IPTV系统架构、传输技术和设备配置的理解;③增强选手在实际操作中的测量、分析和故障排查能力;④确保选手能够熟练运用各种测量工具和分析软件进行视音频指标测量和网络安全数据分析。 阅读建议:由于文档内容详尽且专业性强,建议读者在学习过程中结合实际案例和操作练习,同时参考相关技术文献,以便更好地理解和掌握竞赛所需的知识和技能。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧