java string 去换行符_string - 如何从Java中的文件中删除换行符?

string - 如何从Java中的文件中删除换行符?

如何在Java中替换字符串中的所有换行符,以便在Windows和Linux上工作(即没有特定于OS的回车/换行/换行等问题)?

我试过了(注意readFileAsString是一个将文本文件读入String的函数):

String text = readFileAsString("textfile.txt");

text.replace("\n", "");

但这似乎不起作用。

如何才能做到这一点?

16个解决方案

352 votes

您需要将System.getProperty("line.separator")设置为text的结果:

String text = readFileAsString("textfile.txt");

text = text.replace("\n", "").replace("\r", "");

这是必要的,因为字符串是不可变的 - 调用System.getProperty("line.separator")不会更改原始字符串,它会返回一个已更改的新字符串。 如果未将结果分配给text,则会丢失新的String并收集垃圾。

至于获取任何环境的换行符 - 可通过调用System.getProperty("line.separator")获得。

Kaleb Brasee answered 2019-03-10T19:31:03Z

189 votes

如其他答案所述,您的代码无法正常工作,因为String.replace(...)不会更改目标字符串。 (它不能 - Java字符串是不可变的!)它实际上做的是创建一个新的String,其中的字符根据需要进行了更改。 但是你的代码然后扔掉那个String ...

这是一些可能的解决方案。 哪一个最正确取决于你究竟想做什么。

// #1

text = text.replace("\n", "");

只需删除所有换行符。 这不适用于Windows或Mac线路终端。

// #2

text = text.replace(System.getProperty("line.separator"), "");

删除当前平台的所有行终止符。 这不适用于您尝试在Windows上处理(例如)UNIX文件的情况,反之亦然。

// #3

text = text.replaceAll("\\r|\\n", "");

删除所有Windows,UNIX或Mac行终止符。 但是,如果输入文件是文本,这将连接单词; 例如

Goodbye cruel

world.

Goodbye cruelworld.

所以你可能真的想这样做:

// #4

text = text.replaceAll("\\r\\n|\\r|\\n", " ");

用空格替换每个行终止符。

Stephen C answered 2019-03-10T19:32:08Z

18 votes

如果只想删除当前操作系统上有效的行终止符,可以执行以下操作:

text = text.replaceAll(System.getProperty("line.separator"), "");

如果要确保删除任何行分隔符,可以这样做:

text = text.replaceAll("\\r|\\n", "");

或者,稍微冗长,但更少的regexy:

text = text.replaceAll("\\r", "").replaceAll("\\n", "");

Fabian Steeg answered 2019-03-10T19:32:45Z

10 votes

str = str.replaceAll("\\r\\n|\\r|\\n", " ");

经过大量的搜索后,我找到了很好的工作,但是每一行都失败了。

Renán D answered 2019-03-10T19:33:09Z

8 votes

我想这会很有效率

String s;

s = "try this\n try me.";

s.replaceAll("[\\r\\n]+", "")

编辑语法高亮

JSBach answered 2019-03-10T19:33:39Z

7 votes

此函数将所有空格(包括换行符)向下归一化为单个空格。 不完全是原始问题所要求的,但很可能在许多情况下完全需要:

import org.apache.commons.lang3.StringUtils;

final String cleansedString = StringUtils.normalizeSpace(rawString);

David McWhorter answered 2019-03-10T19:34:05Z

6 votes

在windows / linux / mac下,换行符不一样。 您应该将System.getProperties与属性line.separator一起使用。

Aif answered 2019-03-10T19:34:30Z

3 votes

String text = readFileAsString("textfile.txt").replaceAll("\n", "");

即使oracle网站中的trim()的定义是“返回字符串的副本,省略前导和尾随空格。”

文档中没有说明新行字符(前导和尾随)也将被删除。

简而言之String text = readFileAsString("textfile.txt").trim();也适合你。  (用Java 6检查)

MukeshKoshyM answered 2019-03-10T19:35:08Z

2 votes

String text = readFileAsString("textfile.txt").replace("\n","");

.replace返回一个新字符串,Java中的字符串是不可变的。

Viktor Klang answered 2019-03-10T19:35:32Z

2 votes

您可能希望使用readLine()读取文件。此类可以将输入分解为单独的行,您可以随意组合。 无论当前平台如何,225332853954838686305的操作方式都能自动识别Linux,Windows和MacOS世界的行结束约定。

因此:

BufferedReader br = new BufferedReader(

new InputStreamReader("textfile.txt"));

StringBuilder sb = new StringBuilder();

for (;;) {

String line = br.readLine();

if (line == null)

break;

sb.append(line);

sb.append(' '); // SEE BELOW

}

String text = sb.toString();

请注意,readLine()在返回的字符串中不包含行终止符。 上面的代码附加一个空格,以避免将一行的最后一个单词和下一行的第一个单词粘在一起。

Thomas Pornin answered 2019-03-10T19:36:06Z

0 votes

我觉得奇怪的是(Apache)StringUtils还没有在这里介绍过。

您可以使用.replaceChars方法从字符串中删除所有换行符(或任何其他出现的子串)

StringUtils.replace(myString, "\n", "");

此行将使用空字符串替换所有换行符。

因为换行在技术上是一个字符,您可以选择使用将替换字符的.replaceChars方法

StringUtils.replaceChars(myString, '\n', '');

svarog answered 2019-03-10T19:36:51Z

0 votes

仅供参考,如果您想要使用单线中断替换同时多线中断,那么您可以使用

myString.trim().replaceAll("[\n]{2,}", "\n")

或者用一个空格替换

myString.trim().replaceAll("[\n]{2,}", " ")

Sourav Chandra answered 2019-03-10T19:37:22Z

0 votes

您可以使用apache commons IOUtils遍历该行并将每行附加到StringBuilder。 并且不要忘记关闭InputStream

StringBuilder sb = new StringBuilder();

FileInputStream fin=new FileInputStream("textfile.txt");

LineIterator lt=IOUtils.lineIterator(fin, "utf-8");

while(lt.hasNext())

{

sb.append(lt.nextLine());

}

String text = sb.toString();

IOUtils.closeQuitely(fin);

Shravan Ramamurthy answered 2019-03-10T19:37:47Z

0 votes

您可以使用泛型方法将任何char替换为任何char。

public static void removeWithAnyChar(String str, char replceChar,

char replaceWith) {

char chrs[] = str.toCharArray();

int i = 0;

while (i < chrs.length) {

if (chrs[i] == replceChar) {

chrs[i] = replaceWith;

}

i++;

}

}

Rakesh Chaudhari answered 2019-03-10T19:38:12Z

-1 votes

org.apache.commons.lang.StringUtils#chopNewline

Kumar Abhishek answered 2019-03-10T19:38:37Z

-2 votes

试着这样做:

textValue= textValue.replaceAll("\n", "");

textValue= textValue.replaceAll("\t", "");

textValue= textValue.replaceAll("\\n", "");

textValue= textValue.replaceAll("\\t", "");

textValue= textValue.replaceAll("\r", "");

textValue= textValue.replaceAll("\\r", "");

textValue= textValue.replaceAll("\r\n", "");

textValue= textValue.replaceAll("\\r\\n", "");

seyf answered 2019-03-10T19:38:56Z

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java文件换行符在不同的操作系统是不同的,Windows系统换行符是"\r\n",Unix/Linux系统换行符是"\n",而Mac系统换行符是"\r"。在Java,可以通过如下方法来处理不同操作系统换行符: 1. 读取文件时,使用System.getProperty("line.separator")获取当前操作系统的换行符,然后使用该换行符进行文件的读取和处理。 2. 在Java,可以使用BufferedReader类的readLine()方法来读取一行数据,并自动识别不同操作系统换行符。在输出文件时,可以使用BufferedWriter类的newLine()方法来输出当前操作系统的换行符。 例如,下面的代码可以将Windows系统文件转换为Unix/Linux系统文件: ```java import java.io.*; public class ConvertFile { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new FileReader("windows.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("unix.txt")); String line = null; while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); // 使用当前操作系统的换行符 } br.close(); bw.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 注意:在处理文件时,要确保使用正确的字符编码。可以在FileReader和FileWriter指定字符编码,例如使用UTF-8编码可以如下设置: ```java new FileReader("file.txt", StandardCharsets.UTF_8); new FileWriter("file.txt", StandardCharsets.UTF_8); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值