我正在编写一个类,该方法采用汇总字符串并将其分解为最大行数(maxLines参数)和每行最大字符数(width参数)。除第一行之外的所有行都应缩进(它们应以空格字符开头),但缩进行中的第二个字符不应该是另一个空格(因此不得包含第二个空格)。如果更改maxLine参数r width,程序仍然可以工作。
此外,代码应检查字符串中是否有一些特殊字符,如:
\' , \" , \\ , \t , \b , \r , \f , \n
我如何检查String中的许多空格如下?如果String中有很多空格,我想修剪它们,但我不知道如何。 (这些下划线代表空格。)
"9:00 John_____________________________Doe until 10 30 at Office"
9:00 Jo
_hn____
_______
_____Do
使用我的代码,我得到了这个结果:
9:00 Jo
_hn Doe
_until 1
_0 30 at
但我想要这个输出:
9:00 Jo
_hn Doe
_until_
_10 30_
这是我的代码:
public static void main(String[] args) {
String str = "9:00 John Doe until 10 30 at Office";
int width = 7;
int maxLine = 4;
List<String> lisT = new LinkedList<>(getParts(str, width, maxLine));
for (String part : lisT) {
System.out.println(part);
}
}
public static List<String> getParts(String str, int width, int maxLine) {
List<String> parts = new LinkedList<>();
int count = 0;
int len = str.length();
String indent = "";
for (int i = 0; i < len; i += width) {
parts.add(indent + str.substring(i, Math.min(len, i + width)).trim());
count++;
indent = " ";
if (count == maxLine)
break;
}
return parts;
}
答案 0 :(得分:1)
所以这就是你想要的?我真的希望你不必在某些事情上实现这一点,因为我不得不破坏它以使其发挥作用。希望这是家庭作业
public static void main(String[] args) {
String str = "9:00 John Doe until 10 30 at Office";
int width = 7;
int maxLine = 4;
List<String> lisT = new LinkedList<>(getParts(str, width, maxLine));
for (String part : lisT) {
System.out.println(part);
}
}
public static List<String> getParts(String str, int width, int maxLine){
List<String> parts = new LinkedList<>();
int endedAt = 0;
boolean firstLine = true;
boolean secondLine = true;
String indent = " ";
for (int i = 0; i < maxLine; i++) {
if(endedAt<=str.length()) {
String holder;
if(firstLine) {
holder = str.substring(endedAt, endedAt + width);
firstLine = false;
}
else {
if(secondLine){
width = width -1;
secondLine = false;
}
holder = indent + str.substring(endedAt, endedAt + width).trim();
}
parts.add(holder);
endedAt = endedAt + width;
}
}
return parts;
}
输出
9:00 Jo
hn Doe
until
10 30
答案 1 :(得分:0)
我认为您的行可能太长,因为您的width = 7
包含缩进空格,因此您的行的宽度为8而不是7.我会尝试将for (int i = 0; i < len; i += width) {...
替换为for (int i = 1; i < len; i += width - 1) {...
并在第0行的for循环之前添加一个特殊语句,因为您不想缩进第0行。像这样:
parts.add(str.substring(0, Math.min(len, i + width)).trim());
for(...){...}
让我知道这似乎是问题所在。如果没有,我可以再看看。回答你的其他问题:
要删除字符串中间的多个空格,请使用此空格将所有空格替换为一个空格:
String result = replaceAll("\\s","");
您可以使用以下正则表达式删除特殊字符:
String result = str.replaceAll("[\'\"\\\t\b\r\f\n]","");