删除citeulike导出的bib文件中的中文字符,使之能在WinEdt中读取

编程技术  /  houtizong 发布于 3年前   148
在使用Citeulikehttp://citeulike.org/导出bib文件时,发现导出的文件在WinEdt中无法被识别。。。也就是\cite{}后不弹出提示
后来发现是有中文文献的缘故。。。。干脆写了个小程序去除中文字符。
顺带去除citeulike开头的行。


程序功能:
  • 删除当前文件夹下的bib文件中以"citeulike" 开头(不含空格)的行
  • 非ASCII字符的行。
  • 原文件名称加.origin
  • 生成的文件与原文件同名

编译好的Jar文件见附件

package lc.bibtex;import java.io.*;import javax.swing.JOptionPane;public class DealWithCiteulikeBibFile {//删除当前文件夹下的bib文件中以"citeulike" 开头(不含空格)的行,以及非ASCII字符的行。//原文件名称加.origin;生成的文件与原文件同名public static void main(String[] args) throws IOException {//找到.bib文件File[] bibFiles = new File(".").listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.isFile() && pathname.getName().endsWith(".bib");}});String[] toDelete = { "citeulike" };//删除以 "citeulike" 开头的行boolean deleteNotASCII = true;//删除含非ASCII字符的行,否则ctex读取错误。。。。boolean deleteOriginFileIfNoChange = true;//如果生成的文件与原文件相同,则删除原文件for (File f : bibFiles) {File bak = new File(f.getCanonicalPath() + ".origin");if (bak.exists())bak.delete();boolean b = f.renameTo(bak);//现在备份文件为原文件了!!if (!b) {JOptionPane.showMessageDialog(null, "文件 " + f.getName()+ " 或文件 " + bak.getName() + "可能正被其他程序访问!");continue;}deleteLinesNotASCII_or_StartWith(bak, f, toDelete, deleteNotASCII,deleteOriginFileIfNoChange);}}/** * 删除除空格外以toDelete中字符串开头的单词(可选),以及含有非ASCII字符的行(可选) *  * @param originFile *            原文件 * @param newFileName *            输出文件 * @param toDelete *            删除除空格外以toDelete中字符串开头的单词,toDelete可为null,视为不选该项 * @param deleteNotASCII *            是否删除含非ASCII字符的行 * @param deleteOriginFileIfNoChange *            当新文件和原文件相同时,是否删除原文件 * @throws IOException */public static void deleteLinesNotASCII_or_StartWith(File originFile,File newFile, String[] toDelete, boolean deleteNotASCII,boolean deleteOriginFileIfNoChange) throws IOException {BufferedReader bf = new BufferedReader(new FileReader(originFile));PrintWriter writer = new PrintWriter(newFile);boolean hasChanged = false;loop: while (bf.ready()) {String line = bf.readLine();String lineTrim = line.trim();if (toDelete != null)for (int i = 0; i < toDelete.length; i++) {//删除除空格外以toDelete中字符串开头的单词if (lineTrim.startsWith(toDelete[i])) {hasChanged = true;continue loop;}}for (int i = 0; i < lineTrim.length(); i++) {//删除该行中含有非ASCII字符的行if (lineTrim.charAt(i) > 127) {hasChanged = true;continue loop;}}writer.println(line);}bf.close();writer.close();if (!hasChanged && deleteOriginFileIfNoChange)originFile.delete();}}

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客