提出这个问题非常困难,我相信仍然不清楚。

我有一个CSV文件,例如:名;姓;地址;产品1;产品2;产品3;产品4;

我想开始替换“;”与“ ::”。问题是,我要在第三个分号后开始替换。

我知道可以在检查每个字符的while循环中完成,当出现分号时,我将计数+1,如果counter为3,则将开始替换。但是,有没有办法没有循环地做呢?

最佳答案

您可以使用indexOf(char,fromIndex)方法。
您的第三个分号位置搜索可以内联:

csvLine.indexOf(';', csvLine.indexOf(';', csvLine.indexOf(';') + 1) + 1)


 我们假设csvLine至少具有3个分号...

    String csvLine = "Firstname;Lastname;Adress;product1;product2;product3;product4";

    //Index of "fromIndex" param is inclusive, that's why we need to add 1
    int pos = csvLine.indexOf(';', csvLine.indexOf(';', csvLine.indexOf(';') + 1) + 1);

    //Retrieve string from the char after the third semi-colon
    String truncatedLine = csvLine.substring(pos + 1);

    //Replace ";" by "::" on our substring
    truncatedLine = truncatedLine.replaceAll(";", "::");

    //Then concat the first part of csvLine with the second
    String result = csvLine.substring(0, pos + 1).concat(truncatedLine);

    System.out.println(result);  //Print => Firstname;Lastname;Adress;product1::product2::product3::product4


输入控制和性能不佳,但没有任何循环:)

10-02 04:43