Java中有关水平制表符\t易混淆点

Java中有关水平制表符\t易混淆点

一次普通的练习中突然发现对Java中\t有很多不理解的地方,看了很多博客也没有彻底讲清楚,就很头疼。本文主要总结一下自己所查结合多次实验发现的一些东西。

单独打印’\t’,编译通过,但是没有任何显示

public static void main(String[] args) {
		System.out.println('\t');
	}

在这里插入图片描述
接着打印数字+’\t’

public static void main(String[] args) {
		System.out.println(1 + '\t');
		System.out.println('a' +'\t' + 'b');
	}

结果输出分别为数字10和204,如下
在这里插入图片描述

原来\t实际上是一个转义字符,对应的ASCLL码值是9,所以当其与数字和控制字符做加法运算时是做加9运算。字符a,b对应ASCLL码值分别为97、98,所以才会出现那样的结果,附上转义字符表:
在这里插入图片描述
接下来我们验证\t在字符串中的作用

public static void main(String[] args) {
		System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaa");
		System.out.println("aaaaa\taaaaa" );

	}

结果如下图
在这里插入图片描述
第一行的输出语句只是为了对比,原来\t相当于一个制表符tab(就是相当于你按了一下Tab键),windows中的制表符是字表符前面的字符每八个一分割,最后一段不足八个的补空格,\t是补全当前字符串长度到8的整数倍,当然你补完成八个的次数和你的\t的个数是有关的,比如当前字符串长度10,那么\t后长度是16,也就是补6个空格,如果当前字符串长度12,此时\t后长度是16,补4个空格,在上例中,两个字符串之间刚好间隔三个空格。下面对这个结论进行验证。

public static void main(String[] args) {
		System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaa");
		System.out.println("aaaaa\t\taaaaa" );

	}

中间添加两个\t,结果如下,中间总共间隔了11个空格
在这里插入图片描述
在整个字符串前面添加\t,同样能够验证,说明当\t前面没有字符串时同样增加八个空格。

public static void main(String[] args) {
		System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaa");
		System.out.println("\taaaaa\t\taaaaa" );

	}

在这里插入图片描述
这时候我又想,如果\t前面字符串个数刚好是8的倍数呢?下面来测试一下

public static void main(String[] args) {
		System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaa");
		System.out.println("\taaaaaaaa\taaaaa" );

	}

此时第二个\t前面刚好是8个英文字符,我们却发现它依然会补8个空格(在此之前我以为只有当前面字符串长度不是8的倍数时才会自动补充空格)。
在这里插入图片描述
那我们现在是不是可以总结:\t放在字符串后边,如果前面字符个数不是8的倍数,那它就会自动补空格使得它前面的字符串长度加空格长度为8的倍数;当前面字符串长度为8的倍数时,它自动补充8格空格。
但是,这些都是基于英文字符串的,如果换成中文呢?现在我将第二个\t前面的字符串换成中文字符串(在UTF-8编码格式下,一个中文字符=2个字节=2个空格)

public static void main(String[] args) {
		System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaa");
		System.out.println("\t中文字符\taaaaa" );

	}

在这里插入图片描述
结果发现,当前面为4个中文字符(或者4的倍数)时,\t不再自动补空格,只有不是4的倍数时才按之前的规律补空格(当\t位于字符串起始即其前面没用字符串时也不会自动补充空格)。这就是我的困惑,希望有人能给正解,以上内容如果存在错误的地方,希望广大网友积极指正。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想学摄影的IT男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值