Giải pháp thay thế tốt cho JavaScript ltrim()
và rtrim()
hoạt động trong Java là gì?Giải pháp thay thế LTRIM và RTRIM trong Java là gì?
Trả lời
Với một regex bạn có thể viết:
String s = ...
String ltrim = s.replaceAll("^\\s+","");
String rtrim = s.replaceAll("\\s+$","");
Nếu bạn phải làm điều đó thường xuyên, bạn có thể tạo và biên dịch một mô hình cho hiệu suất tốt hơn:
private final static Pattern LTRIM = Pattern.compile("^\\s+");
public static String ltrim(String s) {
return LTRIM.matcher(s).replaceAll("");
}
Từ một buổi biểu diễn quan điểm, một chương trình điểm chuẩn vi mô nhanh (bài viết JIT biên dịch) rằng phương pháp regex chậm hơn khoảng 5 lần so với vòng lặp (0.49s so với 0.11s cho 1 triệu ltrim).
Cá nhân tôi tìm thấy cách tiếp cận regex dễ đọc hơn và ít bị lỗi hơn nhưng nếu hiệu suất là một vấn đề bạn nên sử dụng giải pháp vòng lặp.
'replaceFirst' là tốt hơn – leventov
Sử dụng regex có thể được tốt đẹp, nhưng nó chậm hơn khá nhiều so với một chức năng cắt tỉa đơn giản:
public static String ltrim(String s) {
int i = 0;
while (i < s.length() && Character.isWhitespace(s.charAt(i))) {
i++;
}
return s.substring(i);
}
public static String rtrim(String s) {
int i = s.length()-1;
while (i >= 0 && Character.isWhitespace(s.charAt(i))) {
i--;
}
return s.substring(0,i+1);
}
Nguồn: http://www.fromdev.com/2009/07/playing-with-java-string-trim-basics.html
Ngoài ra, có một số thư viện cung cấp các chức năng như vậy. Ví dụ: Spring StringUtils. Apache Commons StringUtils cung cấp chức năng tương tự quá: strip, stripStart, stripEnd
StringUtils.stripEnd("abc ", null) = "abc"
+1. Tôi sẽ không gọi đây là "cắt" mặc dù, bởi vì chuỗi # trim không cắt khoảng trắng, nó cắt tỉa các ký tự điều khiển và một số khoảng trống chỉ ASCII. Commons Lang gọi phiên bản của họ (mà làm những gì bạn làm và những gì mọi người có thể muốn) "dải". – Thilo
+1 khác nếu tôi có thể cho liên kết đến StringUtils trong Spring, có "trimLeadingWhitespace". – Thilo
Có, @Thilo là đúng. Để làm cho nó hoạt động như hàm java trim gốc, chỉ cần thay đổi điều kiện thành 's.charAt (i) <= '''. – bezmax
Dựa trên câu trả lời của @bezmax tôi đã có một cái nhìn tại các mùa xuân StringUtils
, nhưng nó không thể biện minh cho tình trạng quá tải cho tôi về việc chuyển đổi sang khuôn khổ mùa xuân. Vì vậy, tôi quyết định tạo ra một lớp Characters
để dễ dàng trái/phải cắt dây cho bất kỳ ký tự nào (lớp). Lớp học có sẵn trên GitHub.
Characters.valueOf('x').trim(...)
Characters.valueOf('x').leftTrim(...)
Characters.valueOf('x').rightTrim(...)
Nếu bạn muốn cắt cho khoảng trắng, có một xác định trước nhân vật đẳng cấp sẵn:
Characters.WHITESPACE.trim(...)
Characters.WHITESPACE.leftTrim(...)
Characters.WHITESPACE.rightTrim(...)
Lớp thực hiện tính năng cũng loại khác của các hoạt động nhân vật, chẳng hạn condense
, replace
hoặc split
.
import org.apache.commons.lang3.StringUtils;
private String rTrim(String str) {
return StringUtils.stripEnd(str, /*stripChars*/" ");
}
private String lTrim(String str) {
return StringUtils.stripStart(str, /*stripChars*/" ");
}
Ổi có CharMatcher trimLeadingFrom và trimTrailingFrom
ví dụ CharMatcher.whitespace.trimTrailingFrom(s)
- 1. TRIM RTRIM Hiệu suất LTRIM
- 2. Giải pháp thay thế với đầu vào tệp là gì?
- 3. Giải pháp thay thế cho -dpkg cho Mac là gì?
- 4. Một số giải pháp thay thế cho ReSharper là gì?
- 5. Việc lạm dụng mixin là điều ác và các giải pháp thay thế là gì?
- 6. "Cặp thay thế" trong Java là gì?
- 7. Giải pháp thay thế JSONObject trong mùa xuân và Jackson
- 8. Giải pháp thay thế mới nhất và tuyệt vời nhất cho Flash là gì?
- 9. Tại sao Ruby 1.9.2 xóa "." từ LOAD_PATH và giải pháp thay thế là gì?
- 10. Các giải pháp thay thế cho công cụ bytecode Java
- 11. Giải pháp thay thế JSON.stringify() trong JavaScript
- 12. Giải pháp thay thế cho tài sản tham chiếu ngược trong NDB là gì?
- 13. Tương đương hoặc giải pháp thay thế cho typedef trong VB.NET là gì?
- 14. Giải pháp thay thế NAnt
- 15. Các giải pháp thay thế cho API Java Mail
- 16. Giải pháp thay thế Graphviz?
- 17. Giải pháp thay thế SVG?
- 18. Gurobi và java và giải pháp trống
- 19. Generics, Polymorphism, Interfaces: giải pháp là gì?
- 20. CA1819: Thuộc tính không được trả về mảng - Giải pháp thay thế phù hợp là gì?
- 21. Các giải pháp thay thế cho kiến trúc MVC để phát triển web là gì?
- 22. Giải pháp thay thế tốt cho SQL Server cho các ứng dụng ASP.NET là gì?
- 23. Các giải pháp thay thế cho YepNope và LabJS
- 24. Các giải pháp thay thế cho ERB
- 25. Giải pháp thay thế GLUT cho Haskell?
- 26. Các giải pháp thay thế cho @VisibleForTesting
- 27. Giải pháp thay thế MathJax/jsMath?
- 28. Giải pháp thay thế phần mềm OpenGL
- 29. Giải pháp thay thế iScroll tốt hỗ trợ chức năng iOS, Android, WP8 và kéo-để-làm mới là gì?
- 30. Các giải pháp thay thế cho vtable
Tôi sẽ chỉ cho bạn tại Commons Lang StringUtils, nhưng chúng không có ltrim/rtrim (hoặc lstrip/rstrip). +1 rồi ... – Thilo
@Thilo, đúng vậy. Xem chỉnh sửa cuối cùng của tôi cho câu trả lời của tôi. – bezmax
@Max: Cảm ơn, niềm tin vào thư viện yêu thích của tôi đã được khôi phục. – Thilo