我有一个字符串,其中包含一些文本,后跟一个空行。保留带有文本的部分,但从末尾删除空白换行符的最佳方法是什么?
String.replaceAll("[\n\r]", "");
这段Java代码完全按照问题标题中的要求进行操作,即“从字符串java的开头和结尾删除换行符”:
String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")
仅从行尾删除换行符:
String.replaceAll("[\n\r]$", "")
仅从行首删除换行符:
String.replaceAll("^[\n\r]", "")
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
String::trim
方法对 whitespace 有一个奇怪的定义。
类添加了新的
String
方法。它们使用更符合 Unicode 的空白定义。请参阅类 JavaDoc 中此定义的规则 Character::isWhitespace
。
示例代码。
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
您没有准确提及组成换行符的代码点。我想您的换行符可能包含在
strip
: 所针对的代码点列表中
如果您只想删除字符串的开头和结尾(而不是中间)的换行符(不是空格、制表符),那么您可以使用以下方法:
使用正则表达式从字符串的开头 (
\\r
) 和结尾 (\\n
) 删除回车符 (^
) 和换行符 ($
):
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")
完整示例:
public class RemoveLineBreaks {
public static void main(String[] args) {
var s = "\nHello world\nHello everyone\n";
System.out.println("before: >"+s+"<");
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
System.out.println("after: >"+s+"<");
}
}
它输出:
before: >
Hello world
Hello everyone
<
after: >Hello world
Hello everyone<
我也将对此添加一个答案,因为虽然我有同样的问题,但提供的答案还不够。经过一番思考,我意识到使用正则表达式可以非常轻松地完成此操作。
要从开头删除换行符:
// 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] + "-");
我确信这不是修剪字符串的最高效的方法。但它似乎确实是内联此类操作的最干净、最简单的方法。
请注意,可以使用相同的方法来修剪两端字符的任何变体和组合,因为它是一个简单的正则表达式。
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])$", "") + "]");
试试这个
function replaceNewLine(str) {
return str.replace(/[\n\r]/g, "");
}
另一个优雅的解决方案。
String myString = "\nLogbasex\n";
myString = org.apache.commons.lang3.StringUtils.strip(myString, "\n");
对于在处理不同换行符时寻找问题答案的其他人:
string.replaceAll("(\n|\r|\r\n)$", ""); // Java 7
string.replaceAll("\\R$", ""); // Java 8
这应该准确删除最后一个换行符并保留字符串中的所有其他空格并与 Unix 一起使用( )、Windows( )和旧Mac( )换行符:https://stackoverflow.com/a/20056634、https://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$", ""));
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");