提出这个问题非常困难,我相信仍然不清楚。
我有一个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
输入控制和性能不佳,但没有任何循环:)