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

时间:2011-09-17 11:17:49

标签: java string line blank-line

我有一个字符串,其中包含一些文字后跟一个空行。保持零件文本的最佳方法是什么,但从末尾删除空白换行符?

12 个答案:

答案 0 :(得分:242)

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

String trimmedString = myString.trim();

答案 1 :(得分:24)

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

答案 2 :(得分:6)

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

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

仅从行尾删除换行符:

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

仅从行首删除换行符:

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

答案 3 :(得分:1)

如果您的字符串可能为null,请考虑使用StringUtils.trim() - String.trim()的空安全版本。

答案 4 :(得分: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]

答案 5 :(得分:1)

如果您只想删除字符串的开头和结尾(不是中间)的换行符(而不是空格,制表符),则可以使用这种方法:

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

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

完整示例:

public class RemoveLineBreaks {
    public static void main(String[] args) {
        var s = "\nHello\nWorld\n";
        System.out.println("before: >"+s+"<");
        s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
        System.out.println("after: >"+s+"<");
    }
}

它输出:

before: >
Hello
World
<
after: >Hello
World<

答案 6 :(得分:1)

尝试一下

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

答案 7 :(得分:0)

我也要为此添加一个答案,因为虽然我有同样的问题,但提供的答案还不够。考虑到一些想法,我意识到这可以通过正则表达式轻松完成。

要从头开始删除换行符

publish-val

和字符串结尾:

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

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

我确定这不是修剪字符串最有效的方法。但它似乎是内联此类操作的最简洁和最简单的方法。

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

答案 8 :(得分:0)

tl; dr

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

String::strip…

旧的String::trim方法的strange definitionwhitespace

here所述,Java 11向String类添加了新的strip…方法。这些使用更精通Unicode的空白定义。在Character::isWhitespace的JavaDoc类中查看此定义的规则。

示例代码。

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

或者您可以去除just the leadingjust the trailing空格。

您没有完全提及code point(s)组成换行符的原因。我想您的换行符可能包含在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文件分隔符。
  • 它是U \ 001D组分隔符'\ u001D'。
  • 它是'\ u001E',U + 001E记录分隔符。
  • 它是'\ u001F',U + 0

答案 9 :(得分:0)

另一个优雅的解决方案。

String myString = "\nLogbasex\n";
myString = org.apache.commons.lang3.StringUtils.strip(myString, "\n");

答案 10 :(得分:0)

对于其他在处理不同换行符时正在寻找问题答案的人:

string.replaceAll("(\n|\r|\r\n)$", ""); // Java 7
string.replaceAll("\\R$", "");          // Java 8

这应该准确地删除最后一个换行符,并保留字符串中的所有其他空格,并可以使用Unix(\ n),Windows(\ r \ n)和旧的Mac(\ r)换行符:https://stackoverflow.com/a/20056634https://stackoverflow.com/a/49791415"\\R"是Java 8中Pattern类中引入的匹配器:https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

这将通过以下测试:

// Windows:
value = "\r\n test \r\n value \r\n";
assertEquals("\r\n test \r\n value ", value.replaceAll("\\R$", ""));

// Unix:
value = "\n test \n value \n";
assertEquals("\n test \n value ", value.replaceAll("\\R$", ""));

// Old Mac:
value = "\r test \r value \r";
assertEquals("\r test \r value ", value.replaceAll("\\R$", ""));

答案 11 :(得分:-3)

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