2012-05-15 45 views
8

Làm thế nào để viết một regex để loại bỏ dấu cách trong Java?Regex để xóa dấu cách

Ví dụ

Input : "   " 
Output : "" 
--------------------- 
Input : " " 
Output : "" 

Lưu ý rằng các tab và các dòng mới không nên được gỡ bỏ. Chỉ cần xóa các khoảng trắng.

Edit:

Làm thế nào để chúng ta thực hiện một kiểm tra?

Ví dụ làm thế nào để kiểm tra trong một nếu tuyên bố rằng một chuỗi chỉ chứa không gian (bất kỳ số trong số họ)

if(<statement>) 
    { 
       //inside statement 
    } 

Đối

input = "     " or input = " " 

Việc kiểm soát nên nên đi bên nếu tuyên bố.

+0

Tôi đã reworded câu hỏi của bạn một chút vì "khoảng trắng" * bao gồm * các tab và newlines (và formfeeds vv), vì vậy bạn nên sử dụng thuật ngữ "không gian" thay thế. –

Trả lời

13

Sau đây sẽ làm điều đó:

str = str.replaceAll(" ", ""); 

Hoặc:

str = str.replaceAll(" +", ""); 

Trong các tiêu chuẩn của tôi, sau này là nhanh hơn so với trước đây ~ 40%.

+1

+1, mặc dù về mặt kỹ thuật không phải là một regex ;-) – ChristopheD

+0

@ChristopheD: Ồ vâng nó là :-) Chữ "" "là một regex khớp với một dấu cách. – NPE

+1

Bạn có thể cải thiện hiệu suất bằng cách thêm dấu '+' sau dấu cách. –

0

Tại sao không thử đơn giản /[ ]+/? Đây sẽ là những gì bạn cần.

+0

Bạn cũng không muốn chụp các tab chụp? Câu hỏi không muốn xóa các tab. – Vikas

+0

vâng đó là câm của tôi. Sử dụng một lớp nhân vật có lẽ thích hợp hơn ở đây. – javex

+0

Bạn ít nhất nên sử dụng '+' làm công cụ định lượng (nếu không bạn sẽ thực hiện thao tác "thay thế không có gì" trên mọi vị trí giữa hai ký tự không dấu trong toàn bộ chuỗi). Ngoài ra, thả các dấu ngoặc đơn - nó chỉ là một ký tự, vì vậy bạn không cần một lớp nhân vật (mặc dù người ta có thể cho rằng nó giúp dễ đọc, và công cụ regex của Java hy vọng sẽ đủ thông minh để tối ưu hóa nó). –

1

bạn có thể làm -

str = str.replace(" ", ""); 
str = str.replaceAll(" +", ""); 

Nếu bạn kiểm tra định nghĩa của replacereplaceAll phương pháp -

public String replace(CharSequence target, CharSequence replacement) { 
     return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
      this).replaceAll(Matcher.quoteReplacement(replacement.toString())); 
    } 

public String replaceAll(String regex, String replacement) { 
    return Pattern.compile(regex).matcher(this).replaceAll(replacement); 
} 

Trừ khi bạn thực sự cần phải thay thế một biểu thức chính quy, replaceAll chắc chắn không phải là sự lựa chọn của chúng tôi. Ngay cả khi hiệu suất được chấp nhận, số lượng đối tượng được tạo sẽ ảnh hưởng đến hiệu suất.

Không có nhiều khác biệt so với replaceAll(), ngoại trừ thời gian biên dịch của biểu thức chính quy (và nhiều khả năng thời gian thực hiện của các khớp) sẽ là một chút ngắn hơn khi trong trường hợp replaceAll(). Tốt hơn là sử dụng phương thức replace thay vì replaceAll.

Real-time so

File size -> 6458400 
replaceAll -> 94 millisecond 
replace -> 78 millisecond 
+0

Bạn có thể thời gian và so sánh 'str.replace (" "," ");' so với 'str.replaceAll (" + "," ");'? Điều đó sẽ rất thú vị. –

+0

@TimPietzcker - vui lòng kiểm tra kết quả kiểm tra. –

5
String str = "  "; 
str = str.replaceAll("\\s+",""); 
Các vấn đề liên quan