我有一个字符串,其中包含一些文字后跟一个空行。保持零件文本的最佳方法是什么,但从末尾删除空白换行符?
答案 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])$", "") + "]");
答案 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)
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
旧的String::trim
方法的strange definition为whitespace。
如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 leading或just the trailing空格。
您没有完全提及code point(s)组成换行符的原因。我想您的换行符可能包含在strip
定位的以下代码点列表中:
答案 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/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$", ""));
答案 11 :(得分:-3)
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");