Java中,如何截取指定物理长度的字符串

时间:2023-01-12 16:04:04
说明下我的想法哈,比如一个String是"啊哦哦1234mwiii什么!?"
假设“i”的物理长度是1,我按照长度3为单位截取字符串,想得到如下结果:
啊,哦,哦,12,34,m,w,iii,什,么,!?。
哪位大神有比较好的方法?

14 个解决方案

#1


汉字的长度固定可以认为是3,数字的话我不知道设为1.5是不是足够恰当。
问题主要是字母和标点的长度,我不想用好几个Switch来挨个计算,计算出和来加出字符串的长度。

我其实是希望有一个类似于自动换行的方法。。。

#2


不懂这样截取,有什么用?

#3


引用 2 楼 gagewang1 的回复:
不懂这样截取,有什么用?


想让输出的信息输出成自定义的形状

#4


啊哦哦1234mwiii什么!?按3个截后面不是应该是类似123,4mw,iii么前面的先无视....

#5


引用 4 楼 scmod 的回复:
啊哦哦1234mwiii什么!?按3个截后面不是应该是类似123,4mw,iii么前面的先无视....


我觉得数字的size应该比字母i大,但具体的比例我不清楚

#6


引用 5 楼 u014721709 的回复:
Quote: 引用 4 楼 scmod 的回复:

啊哦哦1234mwiii什么!?按3个截后面不是应该是类似123,4mw,iii么前面的先无视....


我觉得数字的size应该比字母i大,但具体的比例我不清楚


不应该说size,应该说宽度?

#7


写个方法。 遇到中文判断几位,字母几位的。

#8


引用 6 楼 u014721709 的回复:
Quote: 引用 5 楼 u014721709 的回复:

Quote: 引用 4 楼 scmod 的回复:

啊哦哦1234mwiii什么!?按3个截后面不是应该是类似123,4mw,iii么前面的先无视....


我觉得数字的size应该比字母i大,但具体的比例我不清楚


不应该说size,应该说宽度?

额~还有就是不同编码的话占用字节数也不一样

#9


测试之后配合正则截取

#10


你这个 英文字母有的要一位  有的要三位   我觉得你规则说的还不够清楚

#11


引用 10 楼 jyizhao 的回复:
你这个 英文字母有的要一位  有的要三位   我觉得你规则说的还不够清楚


恩。。。是的,其实就是我想有一个类似于String.length()方法的的String.width()方法。
就比如这样

我从山中来!!
abiisssbnai
mmmmmm
iiiiiiiiiiiiiiiiiiiiii
?~哟吼吼~_

这四句的getWidth()是相等的。

#12


我从山中来
abiisssbna
mmmmmm
iiiiiiiiiiiiiiiiiiiiii
?~哟吼吼~


引用 11 楼 u014721709 的回复:
Quote: 引用 10 楼 jyizhao 的回复:

你这个 英文字母有的要一位  有的要三位   我觉得你规则说的还不够清楚


恩。。。是的,其实就是我想有一个类似于String.length()方法的的String.width()方法。
就比如这样

我从山中来!!
abiisssbnai
mmmmmm
iiiiiiiiiiiiiiiiiiiiii
?~哟吼吼~_

这四句的getWidth()是相等的。


错了是这四句

我从山中来
abiisssbna
mmmmmm
iiiiiiiiiiiiiiiiiiiiii
?~哟吼吼~

#13


你在控制台输出的话这个宽度是没有区别的吧!

#14


String str = "123456789asdfgfaioejw什么鬼-。;‘。";
int n = 4;
for(int i =0; i<str.length();i=i+n){
int k = i + n;
if(k>str.length()) k=str.length();
System.out.println(str.substring(i,k));

}

#1


汉字的长度固定可以认为是3,数字的话我不知道设为1.5是不是足够恰当。
问题主要是字母和标点的长度,我不想用好几个Switch来挨个计算,计算出和来加出字符串的长度。

我其实是希望有一个类似于自动换行的方法。。。

#2


不懂这样截取,有什么用?

#3


引用 2 楼 gagewang1 的回复:
不懂这样截取,有什么用?


想让输出的信息输出成自定义的形状

#4


啊哦哦1234mwiii什么!?按3个截后面不是应该是类似123,4mw,iii么前面的先无视....

#5


引用 4 楼 scmod 的回复:
啊哦哦1234mwiii什么!?按3个截后面不是应该是类似123,4mw,iii么前面的先无视....


我觉得数字的size应该比字母i大,但具体的比例我不清楚

#6


引用 5 楼 u014721709 的回复:
Quote: 引用 4 楼 scmod 的回复:

啊哦哦1234mwiii什么!?按3个截后面不是应该是类似123,4mw,iii么前面的先无视....


我觉得数字的size应该比字母i大,但具体的比例我不清楚


不应该说size,应该说宽度?

#7


写个方法。 遇到中文判断几位,字母几位的。

#8


引用 6 楼 u014721709 的回复:
Quote: 引用 5 楼 u014721709 的回复:

Quote: 引用 4 楼 scmod 的回复:

啊哦哦1234mwiii什么!?按3个截后面不是应该是类似123,4mw,iii么前面的先无视....


我觉得数字的size应该比字母i大,但具体的比例我不清楚


不应该说size,应该说宽度?

额~还有就是不同编码的话占用字节数也不一样

#9


测试之后配合正则截取

#10


你这个 英文字母有的要一位  有的要三位   我觉得你规则说的还不够清楚

#11


引用 10 楼 jyizhao 的回复:
你这个 英文字母有的要一位  有的要三位   我觉得你规则说的还不够清楚


恩。。。是的,其实就是我想有一个类似于String.length()方法的的String.width()方法。
就比如这样

我从山中来!!
abiisssbnai
mmmmmm
iiiiiiiiiiiiiiiiiiiiii
?~哟吼吼~_

这四句的getWidth()是相等的。

#12


我从山中来
abiisssbna
mmmmmm
iiiiiiiiiiiiiiiiiiiiii
?~哟吼吼~


引用 11 楼 u014721709 的回复:
Quote: 引用 10 楼 jyizhao 的回复:

你这个 英文字母有的要一位  有的要三位   我觉得你规则说的还不够清楚


恩。。。是的,其实就是我想有一个类似于String.length()方法的的String.width()方法。
就比如这样

我从山中来!!
abiisssbnai
mmmmmm
iiiiiiiiiiiiiiiiiiiiii
?~哟吼吼~_

这四句的getWidth()是相等的。


错了是这四句

我从山中来
abiisssbna
mmmmmm
iiiiiiiiiiiiiiiiiiiiii
?~哟吼吼~

#13


你在控制台输出的话这个宽度是没有区别的吧!

#14


String str = "123456789asdfgfaioejw什么鬼-。;‘。";
int n = 4;
for(int i =0; i<str.length();i=i+n){
int k = i + n;
if(k>str.length()) k=str.length();
System.out.println(str.substring(i,k));

}