csv文件中的样本数据
##Troubleshooting DHCP Configuration
#Module 3: Point-to-Point Protocol (PPP)
##Configuring HDLC Encapsulation
Hardware is HD64570
所以我想把这些行写成
#Troubleshooting DHCP Configuratin
Module 3: Point-to-Point Protocol(PPP)
#Configuring HDLC Encapsulation
Hardware is HD64570
我写了样例代码
public class ReadCSV {
public static BufferedReader br = null;
public static void main(String[] args) {
ReadCSV obj = new ReadCSV();
obj.run();
}
public void run() {
String sCurrentLine;
try {
br = new BufferedReader(new FileReader("D:\compare\Genre_Subgenre.csv"));
try {
while ((sCurrentLine = br.readLine()) != null) {
if(sCurrentLine.charAt(0) == '#'){
System.out.println(sCurrentLine);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我正在得到低于错误
## DHCP配置故障处理模块3:点对点协议(PPP)配置HDLC封装java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0在以。charAt(未知来源)example.ReadCSV.main (ReadCSV.java: 19)
请告诉我该怎么做?
步骤:
- 逐行读取CSV文件
- 使用
line.replaceFirst("#", "")
删除每一行的第一个# - 将修改后的行写入输出流(文件或字符串),这适合您
如果变量s
包含CSV文件的内容为String
s = s.replace("##", "#");
将所有出现的"##"替换为"#"
你需要String line=buffer.readLine()
检查line.charAt(0)=='#'
获取String newLine=line.substring(1)
这是一个相当微不足道的问题。我不会为你做这些工作,而是概述你需要采取的步骤,而不给你答案。
- 逐行读取文件
- 取第一行,检查该行的第一个字符是否为
#
-如果是,创建该行的子字符串,不包括第一个字符(或使用fileLine.replaceFirst("#", "");
) - 将这一行存储在数组中,或者简单地将当前变量替换为编辑后的变量(
fileLine = fileLine.replaceFirst("#", "");
) - 重复,直到文件中没有行。
- 如果你想在文件中添加这些更改,只需用新行覆盖旧文件(例如使用蒸汽阅读器并将第二个参数设置为false将覆盖)
尝试一下,告诉我们你做了什么,如果人们相信你自己已经彻底尝试过了,他们更有可能帮助你。
package stackoverflow.q_25054783;
import java.util.Arrays;
public class RemoveHash {
public static void main(String[] args) {
String [] strArray = new String [3];
strArray[0] = "##Troubleshooting DHCP Configuration";
strArray[1] = "#Module 3: Point-to-Point Protocol (PPP)";
strArray[2] = "##Configuring HDLC Encapsulation";
System.out.println("Original array: " + Arrays.toString(strArray));
for (int i = 0; i < strArray.length; i++) {
strArray[i] = strArray[i].replaceFirst("#", "");
}
System.out.println("Updated array: " + Arrays.toString(strArray));
}
}
//Output:
//Original array: [##Troubleshooting DHCP Configuration, #Module 3: Point-to-Point Protocol (PPP), ##Configuring HDLC Encapsulation]
//Updated array: [#Troubleshooting DHCP Configuration, Module 3: Point-to-Point Protocol (PPP), #Configuring HDLC Encapsulation]
OpenCSV逐行读取CSV文件并为您提供字符串数组,其中每个字符串是一个逗号分隔的值,对吗?因此,您正在操作一个字符串。
你想从字符串的开头删除'#'符号(如果它在那里)。正确吗?
那么应该这样做:
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
if (nextLine[0].charAt(0) == '#') {
nextLine[0] = nextLine[0].substring(1, nextLine[0].length());
}
}
替换CSV文件中每一行的第一个"#"符号。
private List<String> getFileContentWithoutFirstChar(File f){
try (BufferedReader input = new BufferedReader(new InputStreamReader(new FileInputStream(f), Charset.forName("UTF-8")))){
List<String> lines = new ArrayList<String>();
for(String line = input.readLine(); line != null; line = input.readLine()) {
lines.add(line.substring(1));
}
return lines
} catch(IOException e) {
e.printStackTrace();
System.exit(1);
return null;
}
}
private void writeFile(List<String> lines, File f){
try(BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), StandardCharsets.UTF_8))){
for(String line : lines){
bw.write(content);
}
bw.flush();
}catch (Exception e) {
e.printStackTrace();
}
}
main(){
File f = new File("file/path");
List<Stirng> lines = getFileContent(f);
f.delete();
writeFile(lines, f);
}