Cách chia chuỗi với bất kỳ ký tự khoảng trắng nào dưới dạng dấu phân cách


555

Có gì mẫu regex sẽ cần tôi để vượt qua để java.lang.String.split() chia một chuỗi thành một mảng của chuỗi con sử dụng tất cả các ký tự khoảng trắng ( ' ', '\t', '\n', vv) như delimiters?

Câu trả lời:


955

Một cái gì đó trong dòng

myString.split("\\s+");

Nhóm này tất cả các khoảng trắng như là một dấu phân cách.

Vì vậy, nếu tôi có chuỗi:

"Hello[space][tab]World"

Điều này sẽ mang lại các chuỗi "Hello""World"bỏ qua khoảng trống giữa [space][tab].

Như VonC đã chỉ ra, dấu gạch chéo ngược phải được thoát, vì trước tiên Java sẽ cố thoát chuỗi thành một ký tự đặc biệt và gửi để được phân tích cú pháp. Những gì bạn muốn, là nghĩa đen "\s", có nghĩa là, bạn cần phải vượt qua "\\s". Nó có thể có một chút khó hiểu.

Điều \\snày tương đương với [ \\t\\n\\x0B\\f\\r].


1
Cảm ơn bạn đã nhắc nhở. Tôi chỉ viết mã từ hông :)
Henrik Paul

34
Lưu ý rằng trim()trước tiên bạn cần : trim().split("\\s++")- nếu không, ví dụ: tách `abc` sẽ phát ra hai chuỗi trống trước.
Marcus Junius Brutus

Tại sao bạn sử dụng bốn dấu gạch chéo ngược gần cuối câu trả lời của bạn? I E. "\\\\s"?
Michael Borkowski

"" .trim (). split ("\\ s +") - phân tách chuỗi trống cung cấp cho bạn độ dài 1. "hạn" .trim (). split ("\\ s +") - cung cấp cho bạn độ dài 1 .
PaulSchell 8/8/2015

88

Trong hầu hết các phương ngữ regex, có một tập hợp các tóm tắt ký tự thuận tiện mà bạn có thể sử dụng cho loại điều này - đây là những điều tốt để nhớ:

\w - Phù hợp với bất kỳ nhân vật từ.

\W - Phù hợp với bất kỳ ký tự không từ.

\s - Phù hợp với bất kỳ nhân vật không gian trắng.

\S - Phù hợp với bất cứ điều gì trừ các nhân vật không gian trắng.

\d - Phù hợp với bất kỳ chữ số.

\D - Phù hợp với bất cứ điều gì ngoại trừ chữ số.

Một tìm kiếm cho "Regex Cheatsheets" sẽ thưởng cho bạn rất nhiều bản tóm tắt hữu ích.




64

Để làm việc này trong Javascript , tôi phải làm như sau:

myString.split(/\s+/g)

15
Đây là trong Javascript. Tôi cũng không chú ý :)
miracle2k

14
Giáo sư. Lỗi của tôi. Có thể câu trả lời này vẫn sẽ giúp một số người khác vấp phải chủ đề này trong khi tìm kiếm câu trả lời Javascript. :-)
Mike Manard

Haha Tôi đang tìm câu trả lời cho JavaScript, tình cờ bắt gặp câu hỏi này và sau đó nhận thấy câu trả lời của bạn trước khi tôi rời đi. +1.
Kris

Thật tuyệt! Tôi rất vui khi nghe câu trả lời này tỏ ra hữu ích cho ai đó, ngay cả khi nó trả lời sai câu hỏi. :-)
Mike Manard

Điều này cũng giúp tôi rất nhiều, cần thiết để phân tách máy chủ lập luận :)
Lập trình viên


11

Ngoài ra, bạn có thể có một không gian không phá vỡ UniCode xA0 ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking

Điều này giúp tôi!
Surasin Tancharoen

10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

@Stephan Tôi không thấy những cái đó.
Mũi tên


2

Vì đó là một biểu thức thông thường và tôi cho rằng bạn cũng sẽ không muốn các ký tự không phải là chữ và số như dấu phẩy, dấu chấm, v.v. có thể được bao quanh bởi các khoảng trống (ví dụ: "một, hai" sẽ cho [một] [hai]), nó nên là:

myString.split(/[\s\W]+/)

1

bạn có thể phân tách một chuỗi theo ngắt dòng bằng cách sử dụng câu lệnh sau:

 String textStr[] = yourString.split("\\r?\\n");

bạn có thể phân tách một chuỗi theo khoảng trắng bằng cách sử dụng câu lệnh sau:

String textStr[] = yourString.split("\\s+");


-1

Nghiên cứu mã này .. chúc may mắn

    import java.util.*;
class Demo{
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        System.out.print("Input String : ");
        String s1 = input.nextLine();   
        String[] tokens = s1.split("[\\s\\xA0]+");      
        System.out.println(tokens.length);      
        for(String s : tokens){
            System.out.println(s);

        } 
    }
}

Bạn có thể vui lòng chi tiết câu trả lời của bạn?
Stephan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.