[]csv

package devin.wu.readbook.practice;


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Vector;


public class Csv
{
private static final char QUOTE = '"';

private BufferedReader reader;
private char separator;
private String line;
private Vector<String> field;

public Csv(BufferedReader reader,char separator)
{
this.reader = reader;
this.separator = separator;

field = new Vector<String>();
}

public String getLine() throws IOException
{
line = reader.readLine();

field.clear();
split();

return line;
}

public int getNumberOfField()
{
return field.size();
}

public String getSpecifiedField(int index)
{
return field.get(index);
}

private void split()
{

if(line != null)
{
int startIdx=-1;
int endIdx=-1;
int separatorIdx = -1;
int startFieldIdx = 0;

for(int i=0;i<line.length();i++)
{
char c = line.charAt(i);
if(c == QUOTE)
{
if(i == startFieldIdx)
{
startIdx=i;
}
else
{
if (startIdx != -1)
{
if (i == line.length() -1 || separator == line.charAt(i + 1))
{
// add
// reset
field.add(line.substring(startFieldIdx, i));

startFieldIdx = i+2;
startIdx = -1;
endIdx = -1;
separatorIdx = -1;
i++;
}
else
{
separatorIdx = -1;
}
}
else
{
continue;
}
}
}
else if(c == separator)
{
if(startIdx == -1)
{
field.add(line.substring(startFieldIdx,i));

endIdx=-1;
separatorIdx = -1;
startFieldIdx = i+1;

continue;
}
else if(endIdx == -1)
{
separatorIdx = i;

}
else
{
field.add(line.substring(startFieldIdx, i));

startFieldIdx = i+1;  
separatorIdx = -1;
endIdx = -1;
startIdx = -1;

}
}
else
{
endIdx = -1;
if(i == line.length() -1)
{
if(separatorIdx != -1)
{
field.add(line.substring(startFieldIdx, separatorIdx));

i=separatorIdx;

startIdx = -1;
startFieldIdx = i+1;
separatorIdx = -1;
}
else
{
// field.add((line.substring(beginIndex))
}
}
}

}
if(startFieldIdx<line.length()-1)
{
field.add(line.substring(startFieldIdx));
}
}
}


public static void main(String[] args) throws IOException
{
BufferedReader reader = new BufferedReader(new FileReader("E:\\JavaEE\\Training\\src\\devin\\wu\\readbook\\practice\\test.csv"));
Csv csv = new Csv(reader,',');
String line = null;
int lineNo = 1;
while( (line=csv.getLine()) != null)
{
System.out.println(lineNo+":"+line);
lineNo++;
for(int i=0;i<csv.getNumberOfField();i++)
{
System.out.print("field["+i+"]=" + csv.getSpecifiedField(i)+" ");
}
System.out.println();
}
}
}

猜你喜欢

转载自blog.csdn.net/WolfOfSiberian/article/details/46421835
csv
今日推荐