我試圖創建一個程序,它從目錄中讀取CSV文件,使用正則表達式解析文件的每一行,並在匹配正則表達式模式後顯示行。 例如,如果這是我的csv文件的第一行在Java中使用正則表達式解析CSV文件
1997,Ford,E350,"ac, abs, moon",3000.00
我的輸出應該是
1997 Ford E350 ac, abs, moon 3000.00
我不希望使用任何現有的CSV庫。我不擅長正則表達式,我用了一個我在網上找到的正則表達式,但它在我的程序中不起作用 這是我的源代碼,如果有人告訴我我要修改的地方和內容,我將不勝感激爲了使我的工作。請給我解釋一下。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.CharBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexParser {
private static Charset charset = Charset.forName("UTF-8");
private static CharsetDecoder decoder = charset.newDecoder();
String pattern = "\"([^\"]*)\"|(?<=,|^)([^,]*)(?=,|$)";
void regexparser(CharBuffer cb)
{
Pattern linePattern = Pattern.compile(".*\r?\n");
Pattern csvpat = Pattern.compile(pattern);
Matcher lm = linePattern.matcher(cb);
Matcher pm = null;
while(lm.find())
{
CharSequence cs = lm.group();
if (pm==null)
pm = csvpat.matcher(cs);
else
pm.reset(cs);
if(pm.find())
{
System.out.println(cs);
}
if (lm.end() == cb.limit())
break;
}
}
public static void main(String[] args) throws IOException {
RegexParser rp = new RegexParser();
String folder = "Desktop/sample";
File dir = new File(folder);
File[] files = dir.listFiles();
for(File entry: files)
{
FileInputStream fin = new FileInputStream(entry);
FileChannel channel = fin.getChannel();
int cs = (int) channel.size();
MappedByteBuffer mbb = channel.map(FileChannel.MapMode.READ_ONLY, 0, cs);
CharBuffer cb = decoder.decode(mbb);
rp.regexparser(cb);
fin.close();
}
}
}
這是我的輸入文件
年份,牌子,型號,說明,價格
1997年,福特E350,「交流, abs,moon「,3000.00
1999,Chevy,」Venture「」Extended Edition「」「,」「,4900.00
1999年,雪佛蘭, 「創業 」「 加長版,非常大」, 「」, 「」,5000.00
1996年,吉普,大切諾基,「割愛!
空氣,天窗,裝」,4799.00
我得到一樣的地方是在我的代碼的問題?爲什麼沒有我的正則表達式對代碼的任何影響輸出?
「我不想使用任何現有的CSV庫」我建議你詳細說明這一點。爲什麼不?一般來說,Regex是這個工作的錯誤工具,爲此,有很好的CSV解析庫。 – EdC
String.split(http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html)對你來說還不夠嗎? :) – m4tx
@EdC通過使用正則表達式我試圖擴展到其他文件格式,如通用閱讀器,通過使用不同的正則表達式我可以解析不同的格式。順便說一句,爲什麼正則表達式是錯誤的工具,你可以解釋更多? –