替换Java中的每个第n个字符

时间:2017-12-18 15:44:53

标签: java regex

我有一个相当简单易碎的字符串格式化程序,我可以从源中分割数据条目的唯一方法是知道条目的大小,然后将其从输入数据中删除。
例如,输出类似于:

field1 / field2 / field3 / field4 / 
field1 / field2 / field3 / field4 /
field1 / field2 / field3 / field4 /

我想在每个n /分割输出,在这种情况下每隔4 / 我不能基于\ n进行拆分,因为输出可以插入\ n字符以便将输出包装到屏幕上,并且我不允许更改输出代码或以其他格式接收输出代码。

到目前为止,我的想法是基于/拆分整个原始输入,然后将每个n个条目组合为一个对象,但我觉得这不是一个特别优雅的解决方案。

1 个答案:

答案 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;
}

这可能需要调整边缘情况(空输入字符串等)。写一些测试并让它们通过 - 我没有做所有的工作!