java文件 换行符,如何从Java中删除文件中的换行符?

回答(16)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您需要将 text 设置为 text.replace() 的结果:

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

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

这是必要的,因为字符串是不可变的 - 调用 replace 并没有改变 . 如果未将结果分配给 text ,则新的String将丢失并进行垃圾回收 .

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如其他答案所述,您的代码主要不起作用,因为 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", " ");

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

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

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

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

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

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

经过大量的搜索后,我找到了很好的工作,但每一条线路都失败了 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我想这会很有效率

String s;

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

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

编辑语法高亮

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

import org.apache.commons.lang3.StringUtils;

final String cleansedString = StringUtils.normalizeSpace(rawString);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

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

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

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可能想要使用 BufferedReader 读取文件 . 该类可以将输入分解为单独的行,您可以随意组合 . 无论当前平台如何, BufferedReader 操作的方式都能自动识别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() 在返回的字符串中不包括行终止符 . 上面的代码附加一个空格,以避免将一行的最后一个单词和下一行的第一个单词粘在一起 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

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

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

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

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

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

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

或者用一个空格替换

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以使用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);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以使用泛型方法将任何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++;

}

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

org.apache.commons.lang.StringUtils#chopNewline

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

试着这样做:

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", "");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值