替换Java中的每个第n个字符出现[关闭]

问题描述 投票:-3回答:1

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

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

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

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

java regex
1个回答
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;
}

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

© www.soinside.com 2019 - 2024. All rights reserved.