Java 如何通过编程找出有多少;“标签”;一根绳子能插进去吗?

Java 如何通过编程找出有多少;“标签”;一根绳子能插进去吗?,java,alignment,Java,Alignment,假设我有一个Java字符串 "abcdefghijklmnopqrstuvwxyz0123456789...." 有没有办法找出这个可以“容纳”多少个选项卡?那么比如说, 如果我打印 "\t\t\t\t\t..." 选项卡的视觉长度将在什么时候超过字符串?或者换句话说,如何计算制表符空间的长度?假设您使用的是标准的1个制表符=4个空格。 String myString = "abcdefghijklmnopqrstuvwxyz0123456789...."; //I'm not sure

假设我有一个Java字符串

"abcdefghijklmnopqrstuvwxyz0123456789...."
有没有办法找出这个可以“容纳”多少个选项卡?那么比如说,

如果我打印

"\t\t\t\t\t..." 

选项卡的视觉长度将在什么时候超过字符串?或者换句话说,如何计算制表符空间的长度?

假设您使用的是标准的1个制表符=4个空格。

String myString = "abcdefghijklmnopqrstuvwxyz0123456789....";

//I'm not sure what you want to do with the extra characters, 
//Just replace round by floor, or ceil if you'd like...
//If you want to floor, then just do: int nbOfVisualTabs = myString.length()/4
int nbOfVisualTabs = Math.round( (double)myString.length()/4.0 ); 

假设您使用的是标准1选项卡=4个空格。

String myString = "abcdefghijklmnopqrstuvwxyz0123456789....";

//I'm not sure what you want to do with the extra characters, 
//Just replace round by floor, or ceil if you'd like...
//If you want to floor, then just do: int nbOfVisualTabs = myString.length()/4
int nbOfVisualTabs = Math.round( (double)myString.length()/4.0 ); 
嗯,
String.length()
将给出字符串中的字符数,需要除以制表符宽度,通常为4或8。由于选项卡宽度通常是用户可配置的,所以这不是一个很好的方法

如果要以固定宽度字体显示,可以选择打印适当数量的空格字符。如果显示可以是成比例的字体,则需要更复杂的方法来对齐元素。

好的
String.length()
将给出字符串中的字符数,您需要除以制表符宽度,通常为4或8。由于选项卡宽度通常是用户可配置的,所以这不是一个很好的方法

如果要以固定宽度字体显示,可以选择打印适当数量的空格字符。如果显示可以采用比例字体,则需要更复杂的方法来对齐元素。

选项卡中的“字符”数量会有所不同,因此您无法静态地进行对齐。我能想到的唯一方法是实际添加它们,然后测试字符串是否更长。比如:

while(whateverEventuallyContainsYourString.VisualWidth < yourOtherStringsContainer.VisualWidth) 
{   //Obviously that property doesn't really exist, you'd have to figure something out there.
    myString += "\t";
}
while(whateverEventuallyContainsYourString.VisualWidth
但是,如果不知道您在什么环境下工作,我甚至不知道如果不设置更多的脚手架,这是否可行。

选项卡中的“字符”数量会有所不同,因此您将无法静态执行。我能想到的唯一方法是实际添加它们,然后测试字符串是否更长。比如:

while(whateverEventuallyContainsYourString.VisualWidth < yourOtherStringsContainer.VisualWidth) 
{   //Obviously that property doesn't really exist, you'd have to figure something out there.
    myString += "\t";
}
while(whateverEventuallyContainsYourString.VisualWidth

但是,如果不知道您在什么环境下工作,我甚至不知道如果不设置更多的脚手架,这是否可行。

我假设您正在使用(某种程度上)标准的
1 tab==4个空格
?String.length除以tab space的长度?@JesseWebb有没有办法找出tab space的长度?tab space完全取决于显示文本的应用程序以及用户如何配置该应用程序。@CodeBlue,如Graham所述,并非所有应用程序中的选项卡都是相同的。如果您在命令提示符(如UI)中使用单间距字体,则大多数人使用
1 tab==4空格
。如果不是,那么你可能是索尔。我假设你使用的是(某种程度上)标准的
1 tab==4空格
?String.length除以tab space的长度?@JesseWebb有没有办法找出tab space的长度?tab space完全取决于显示文本的应用程序,以及用户如何配置该应用程序。@CodeBlue,正如格雷厄姆提到的,并非所有应用程序中的选项卡都是相同的。如果您在命令提示符(如UI)中使用单间距字体,则大多数人使用
1 tab==4空格
。如果不是,那么你可能是索尔。为什么你要
floor()
ing整数除法?这样,这家伙就更容易切换到
round()
ceil()
(取决于他想对额外字符做什么)。请参阅它旁边的注释。;-)当然,Java无论如何都会截断它(这与
floor()ing
的结果相同)。@mbinette
myString.length()/4
已经被舍入:它是一个整数。
round
ceil
不适用于整数除法
Math.ceil(5/3)
仍然是
1
,因为
5/3
1
。verdesmarald:你说得对,我的坏孩子。更正。我刚醒;-)编辑:对不起,我误解了你的第一条评论!你为什么要
floor()
ing整数除法?这样,这个家伙就更容易切换到
round()
ceil()
(取决于他想对额外字符做什么)。请参阅它旁边的注释。;-)当然,Java无论如何都会截断它(这与
floor()ing
的结果相同)。@mbinette
myString.length()/4
已经被舍入:它是一个整数。
round
ceil
不适用于整数除法
Math.ceil(5/3)
仍然是
1
,因为
5/3
1
。verdesmarald:你说得对,我的坏孩子。更正。我刚醒;-)编辑:对不起,我误解了你的第一条评论!