Tôi có một chuỗi chứa một số văn bản theo sau là một dòng trống. Cách tốt nhất để giữ phần bằng văn bản, nhưng loại bỏ dòng mới khoảng trắng từ cuối?
Tôi có một chuỗi chứa một số văn bản theo sau là một dòng trống. Cách tốt nhất để giữ phần bằng văn bản, nhưng loại bỏ dòng mới khoảng trắng từ cuối?
Câu trả lời:
Sử dụng String.trim()
phương pháp để loại bỏ khoảng trắng (dấu cách, dòng mới, v.v.) từ đầu và cuối chuỗi.
String trimmedString = myString.trim();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
String::trim
Phương pháp cũ có một định nghĩa kỳ lạ về khoảng trắng .
Như đã thảo luận ở đây , Java 11 bổ sung các strip…
phương thức mới cho String
lớp. Chúng sử dụng một định nghĩa hiểu biết về Unicode hơn về khoảng trắng. Xem các quy tắc của định nghĩa này trong lớp JavaDoc cho Character::isWhitespace
.
Mã ví dụ.
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
Hoặc bạn có thể tách chỉ hàng đầu hoặc chỉ khoảng trắng theo sau .
Bạn không đề cập chính xác những điểm mã nào tạo nên dòng mới của bạn. Tôi tưởng tượng dòng mới của bạn có thể được bao gồm trong danh sách các điểm mã được nhắm mục tiêu bởi strip
:
Mã Java này thực hiện chính xác những gì được hỏi trong tiêu đề của câu hỏi, đó là "xóa các dòng mới từ đầu và cuối chuỗi-java":
String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")
Chỉ xóa các dòng mới từ cuối dòng:
String.replaceAll("[\n\r]$", "")
Chỉ xóa các dòng mới từ đầu dòng:
String.replaceAll("^[\n\r]", "")
Nếu chuỗi của bạn có khả năng null
, hãy xem xét sử dụng StringUtils.trim()
- phiên bản không an toàn của String.trim()
.
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])$", "") + "]");
Tôi cũng sẽ thêm một câu trả lời cho câu hỏi này bởi vì, trong khi tôi có cùng một câu hỏi, câu trả lời được cung cấp không đủ. Suy nghĩ một chút, tôi nhận ra rằng điều này có thể được thực hiện rất dễ dàng với một biểu thức thông thường.
Để xóa dòng mới từ đầu:
// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);
System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");
và kết thúc chuỗi:
// Trim right
String z = "\n\nfrom the end\n\n";
System.out.println("-" + z.split("\\n+$", 2)[0] + "-");
Tôi chắc chắn rằng đây không phải là cách hiệu quả nhất để cắt xén một chuỗi. Nhưng nó dường như là cách sạch nhất và đơn giản nhất để nội tuyến một hoạt động như vậy.
Lưu ý rằng cùng một phương pháp có thể được thực hiện để cắt bất kỳ biến thể và kết hợp các ký tự nào từ hai đầu vì đây là một biểu thức đơn giản.
split()
chỉ là giới hạn. Bỏ nó đi nếu bạn muốn kết hợp không giới hạn số lần.
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");