按固定长度拆分字符串,并用空格填充空白



我想将字符串拆分为固定长度,例如,按20个字符拆分,如果拆分后的长度小于20个字符,则在字符串中填充最多20个字符的空白。

public static List<String> splitEqually(String text, int size) {
List<String> ret = new ArrayList<String>((text.length() + size - 1) / size);
for (int start = 0; start < text.length(); start += size) {
ret.add(text.substring(start, Math.min(text.length(), start + size)));
}
return ret;
}

我使用上面的代码按相等的大小进行拆分。

此代码将解决您的问题。

public static List<String> splitEqually(String text, int size) {
List<String> ret = new ArrayList<String>((text.length() + size - 1) / size);
StringBuilder str1 = new StringBuilder();
for (int start = 0; start < text.length(); start += size) {
String temp = text.substring(start, Math.min(text.length(), start + size));
if (temp.length() == size) {
ret.add(temp);
System.out.println(temp.length());
} else {
int n = size - temp.length();
str1.append(temp);
for (int j =0 ; j< n ; j++){
str1.append(" ");
}
System.out.println(str1.length());
ret.add(str1.toString());
}
}
return ret;
}

只有最后一个值可能不是给定的大小,所以如果需要,请在循环后用空格填充。

public static List<String> splitFixedWidth(String text, int width) {
List<String> ret = new ArrayList<>((text.length() + width - 1) / width);
for (int start = 0; start < text.length(); start += width) {
ret.add(text.substring(start, Math.min(text.length(), start + width)));
}
if (! ret.isEmpty()) {
String lastValue = ret.get(ret.size() - 1);
if (lastValue.length() < width) {
lastValue += " ".repeat(width - lastValue.length());
ret.set(ret.size() - 1, lastValue);
}
}
return ret;
}

在11以下的Java版本中,使用:

if (lastValue.length() < width) {
char[] buf = new char[width];
lastValue.getChars(0, lastValue.length(), buf, 0);
Arrays.fill(buf, lastValue.length(), width, ' ');
ret.set(ret.size() - 1, new String(buf));
}

或者更短但效率更低:

if (lastValue.length() < width) {
ret.set(ret.size() - 1, String.format("%-" + width + "s", lastValue));
}

带lambda

String blanks20 = "                    ";
ArrayList<String> fixed20 = list.stream().collect( Collector.of( ArrayList::new,
(l, s) -> {
for(int i = 0; ; s = s.substring( 20 )) {
l.add( (s + blanks20).substring( i, i + 20 ) );
if( s.length() < 20 )
break;
} },
(l, r) -> { l.addAll( r ); return( l ); } ) );

最新更新