我有一个相当简单易碎的字符串格式化程序,我可以从源中分割数据条目的唯一方法是知道条目的大小,然后将其从输入数据中删除。
例如,输出类似于:
field1 / field2 / field3 / field4 /
field1 / field2 / field3 / field4 /
field1 / field2 / field3 / field4 /
我想在每个n /分割输出,在这种情况下每隔4 / 我不能基于\ n进行拆分,因为输出可以插入\ n字符以便将输出包装到屏幕上,并且我不允许更改输出代码或以其他格式接收输出代码。
到目前为止,我的想法是基于/拆分整个原始输入,然后将每个n个条目组合为一个对象,但我觉得这不是一个特别优雅的解决方案。
答案 0 :(得分:0)
不要指望您想要完成的每个任务都有内置的库方法。有时最好的方法就是自己写。
public List<String> splitEvery(String source, char delimiter, int num) {
List<String> list = new ArrayList<>();
StringBuilder item = new StringBuilder();
int delimCount = 0;
for(int i=0; i<source.length(); i++) {
char c = source.charAt(i);
if(c == delimiter) {
delimCount++;
}
if(delimCount == num) {
delimCount = 0;
list.add(item.toString());
item = new StringBuilder();
} else {
item.append(c);
}
}
list.add(item.toString());
return list;
}
或者:
public List<String> splitEvery(String source, char delimiter, int num) {
List<String> list = new ArrayList<>();
int delimCount = 0;
int startOfCurrentItem = 0;
for(int i=0; i<source.length(); i++) {
char c = source.charAt(i);
if(c == delimiter) {
delimCount++;
}
if(delimCount == num) {
delimCount = 0;
list.add(source.substring(startOfCurrentItem, i));
startOfCurrentItem = i+1;
}
}
list.add(source.substring(startOfCurrentItem, source.length()));
return list;
}
这可能需要调整边缘情况(空输入字符串等)。写一些测试并让它们通过 - 我没有做所有的工作!