首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >删除Java文件中的最后一个换行符

删除Java文件中的最后一个换行符
EN

Stack Overflow用户
提问于 2018-06-16 01:40:35
回答 1查看 2.7K关注 0票数 3

我想用java删除文件中的最后一个换行符。我的意思是,在文件的最后有一个换行符,我想要删除它。

我尝试了网上提供的许多解决方案,但都不起作用。

下面的代码从文件中删除所有换行符

trimm.replace("\n", "").replace("\r", "");

示例文本:

ABC 123|1|2 ABC '123|1|2|"Jan 30 2018  2:34:13:000AM"|dd1|1|"Jan 30 2018  2:56:08:000AM"|EST' ABC 20180821
ABC 123|1|2 ABC '123|1|2|"Jan 30 2018  2:34:13:000AM"|dd1|1|"Jan 30 2018  2:56:08:000AM"|EST' ABC 20180821

上面的示例在末尾有换行符。我已经参考了下面的URL:

http://www.avajava.com/tutorials/lessons/how-do-i-remove-a-newline-from-the-end-of-a-string.html

https://www.java-forums.org/new-java/22655-removing-last-blank-line-txt-file.html

我不能在\n之后使用split(),因为很多raws都有相同的单词

我的代码:

    String actual ="ABC 123|1|2 ABC '123|1|2|\"Jan 30 2018  2:34:13:000AM\"|dd1|1|\"Jan 30 2018  2:56:08:000AM\"|EST' ABC 20180821\r\n" + 
            "ABC 123|1|2 ABC '123|1|2|\"Jan 30 2018  2:34:13:000AM\"|dd1|1|\"Jan 30 2018  2:56:08:000AM\"|EST' ABC 20180821\r\n";
    try {
          File fout = new File("I:\\demo\\S2.txt");
          FileOutputStream fos = new FileOutputStream(fout);
          BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
          String trimm= actual;
/*            StringBuilder sb = new StringBuilder(trimm);
              int lastEnterPosition = trimm.lastIndexOf("\r\n");
              sb.replace(lastEnterPosition, lastEnterPosition + 1, "");
              trimm = sb.toString();*/
              trimm = trimm.replaceAll("[\n\r]+$", "");
              bw.write(trimm);
              bw.newLine();
              bw.close();
            } catch (FileNotFoundException e){
              // File was not found
              e.printStackTrace();
            } catch (IOException e) {
              // Problem when writing to the file
              e.printStackTrace();
            }

任何变通方法都会很有帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-06-16 02:43:37

如果您知道字符串始终以\r\n结尾,则给出

String test = "your string that ends with a newline\r\n";

您可以使用类似于

String eol = "\r\n";
int eolLen = eol.length();
String tmp = test.substring(0, test.length()-eolLen);

使用正则表达式似乎有点过分了。您可以选择检查字符串是否真的以换行符结尾,如果可能得到错误的输入,则抛出某种类型的异常。类似于:

String check = test.substring(test.length() - eolLen);
if (!eol.equals(check)) {
    throw new Exception(String.format("Expected newline, found %s", check));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50880394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档