问题:
输入一串字符串,比如asdsaf asdasda dasdasda asdasdad dsafsadsa asfaqeqe saddadas。
然后输入一个数字让字符串按输入的数字自动换行,比如输入字符串20,则输出为:
asdsaf asdasda dasda
sda asdasdad dsafsad
sa asfaqeqe saddadas
该函数的返回值为预处理后的文本。预处理后的文本为每一节,及其所在的行号。中间以分号隔开。若一个节跨越了多行,则行号用逗号隔开,并从小到大进行排列。
比如以上结果就为:asdsaf【1】; 【1】,asdasda【1】; 【1】,dasdasda【1,2】; 【2】;
asdasdad【2】; 【2】; dsafsadsa【2,3】; 【3】; asfaqeqe【3】; 【3】; saddadas
解答:
public static void main(String[] args)
{
String input = "asdsaf asdasda dasdasda asdasdad dsafsadsa asfaqeqe saddadas";
int lenth = 20;
// 多个空格替换为1个之后trim
input = input.replaceAll(" +", " ").trim();
String pre = input.replace(" ", "(%s);(%s);");
System.out.println(input);
System.out.println(pre);
// 切分为数组
String[] inputArr = input.split(" ");
// 空格数量
int count = inputArr.length - 1;
int pos = 0;
int start;
int end;
String startShow;
String endShow;
List<String> replace = new ArrayList<String>();
for (String arr : inputArr)
{
start = pos / lenth + 1;
pos = pos + arr.length();
end = pos / lenth + 1;
// 空格长度为1
pos++;
if (start == end)
{
startShow = start + "";
endShow = end + "";
}
else
{
startShow = start + "," + end;
endShow = end + "";
}
// 打印原始数组字符以及待替换数据
System.out.println(String.format("%s %s to %s", arr, startShow, endShow));
if (replace.size() < count * 2)
{
replace.add(startShow);
replace.add(endShow);
}
}
// 打印最后结果
System.out.println(String.format(pre, replace.toArray(new String[0])));
}
运行结果