如何从字符串的开头和结尾删除换行符(Java)?


Answers:


277

使用String.trim()方法从字符串的开头和结尾去除空格(空格,换行等)。

String trimmedString = myString.trim();

16
问题是关于换行符。这不仅仅删除了换行符-mmm
2015年

22
String.replaceAll("[\n\r]", "");

13
兄弟,@ JohnB它将同时删除字符串之间的所有换行符。要求仅删除开头和结尾的换行符。
siddhartha

5

tl; dr

String cleanString = dirtyString.strip() ; // Call new `String::string` method.

String::strip…

String::trim方法对空格的定义奇怪

随着讨论这里,Java的11增加了新的strip…方法到String类。这些使用更精通Unicode的空白定义。请参阅JavaDoc类中有关此定义的规则Character::isWhitespace

示例代码。

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");

或者,您可以去除前导尾随空白。

您没有确切提及组成换行符的代码点。我想您的换行符可能包含在以下针对的代码点列表中strip

  • 它是Unicode空格字符(SPACE_SEPARATOR,LINE_SEPARATOR或PARAGRAPH_SEPARATOR),但也不是不间断空格('\ u00A0','\ u2007','\ u202F')。
  • 是'\ t',U + 0009水平制表符。
  • 是'\ n',U + 000A LINE FEED。
  • 它是'\ u000B',U + 000B垂直制表符。
  • 它是'\ f',U + 000C FORM FEED。
  • 是'\ r',U + 000D回车。
  • 它是“ \ u001C”,U + 001C文件分隔符。
  • 是'\ u001D',U + 001D组分隔符。
  • 是'\ u001E',U + 001E记录分隔符。
  • 它是'\ u001F',U + 0

4

此Java代码完全符合问题标题中的要求,即“从字符串java的开头和结尾删除换行符”:

String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")

仅从行尾删除换行符:

String.replaceAll("[\n\r]$", "")

仅从行首删除换行符:

String.replaceAll("^[\n\r]", "")

您能否为您的答案提供更多背景信息?这样,每个人都可以理解您的代码做什么以及原因。
Mariano Zorrilla

我在回答中添加了解释。我希望现在很清楚。
亚历山大·萨莫洛夫


1
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
  1. 字符串的开头= ^,
  2. 字符串的结尾= $,
  3. 正则表达式组合= | ,
  4. 换行符= \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]

0

我还要为此添加一个答案,因为尽管我有相同的问题,但提供的答案仍然不够。经过深思熟虑,我意识到使用正则表达式可以非常轻松地完成此操作。

要从一开始就删除换行符

// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);

System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");

和一个字符串的结尾:

// Trim right
String z = "\n\nfrom the end\n\n";

System.out.println("-" + z.split("\\n+$", 2)[0] + "-");

我敢肯定,这不是修剪字符串最有效的方式。但这确实是内联此类操作的最干净,最简单的方法。

请注意,由于它是一个简单的正则表达式,因此可以用相同的方法修剪两端的任何字符变体和组合。


是的,但是如果您不知道开头/结尾有几行怎么办?您的解决方案假设在两种情况下都只有2条换行符
LukaGovedič'18

的第二个参数split()就是极限。如果您想无限次匹配,则将其关闭。
Zhro

0

您可以使用正则表达式从字符串的开头()和结尾()删除回车符(\\r)和换行符(\\n):^$

 s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)")

0

试试这个

function replaceNewLine(str) { 
  return str.replace(/[\n\r]/g, "");
}

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

2
这不能正确回答问题。它删除所有CR和LF,而不仅仅是开头和结尾的那些。
james.garriss 2015年

这将取代所有内容,而不仅仅是从头到尾。
Hamzeh Soboh,2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.