Cách chia chuỗi theo không gian


328

Tôi cần chia Chuỗi của tôi theo khoảng trắng. Đối với điều này, tôi đã cố gắng:

str = "Hello I'm your String";
String[] splited = str.split(" ");

Nhưng nó dường như không hoạt động.


3
Có vẻ tốt ... các giá trị trong mảng 'splited' là gì?
npinti

1
Mã của bạn thực sự hoạt động như vốn có. Xem mã chạy trực tiếp tại IdeOne.com .
Basil Bourque

@BasilBourque - Tôi không thể tìm thấy bất kỳ nút chạy nào trên liên kết đó
nanosoft

1
@nanosoft Trang tại IdeOne.com tự động chạy khi tải. Xem đầu ra bên dưới mã, trong phần xuất chuẩn . Để thay đổi mã, nhấp vào forkliên kết gần góc trên cùng bên trái.
Basil Bourque

Câu trả lời:


638

Những gì bạn có nên làm việc. Tuy nhiên, nếu các không gian được cung cấp đang mặc định là ... cái gì khác? Bạn có thể sử dụng regex khoảng trắng:

str = "Hello I'm your String";
String[] splited = str.split("\\s+");

Điều này sẽ khiến bất kỳ số lượng không gian liên tiếp nào phân tách chuỗi của bạn thành mã thông báo.

Như một lưu ý phụ, tôi không chắc "tách" là một từ :) Tôi tin rằng trạng thái là nạn nhân của sự chia tách cũng là "chia tách". Đó là một trong những điều khó khăn về ngữ pháp :-) Không cố gắng kén chọn, chỉ cần hình dung tôi sẽ vượt qua nó!


45
Tôi là người Thụy Sĩ những gì bạn mong đợi, tiếng Anh của tôi không phải là tốt nhất; P, dù sao thì nó cũng hoạt động!
safari

29
:-) Này, nó không lớn đâu. Tôi đã sử dụng một số tên biến vô lý (trong mã mà tôi có lẽ không nên để sống!) Tôi đã không cố gắng trở thành một ngữ pháp nazi hoặc bất cứ điều gì, chỉ truyền vào một câu đố nhỏ, đó là tất cả.
corsiKa

7
@Safari, bạn vừa nhận được 2 lời khuyên tuyệt vời về giá 1. chỉ đùa thôi. Câu trả lời chính xác.
Mangal Nirmal

8
"Những gì bạn nên làm" Tôi nói điều gì đó tương tự khá thường xuyên khi mã của tôi bị hỏng.
Griffin

1
Tôi thấy nó hữu ích vì trường hợp sử dụng của tôi là tách chuỗi và xóa nhiều khoảng trắng. Một dòng mã làm cả hai cho tôi.
Niharika Upadhyay

85

Mặc dù câu trả lời được chấp nhận là tốt, hãy lưu ý rằng bạn sẽ kết thúc bằng một chuỗi trống hàng đầu nếu chuỗi đầu vào của bạn bắt đầu bằng một khoảng trắng. Ví dụ: với:

String str = " Hello I'm your String";
String[] splitStr = str.split("\\s+");

Kết quả sẽ là:

splitStr[0] == "";
splitStr[1] == "Hello";
splitStr[2] == "I'm";
splitStr[3] == "Your";
splitStr[4] == "String";

Vì vậy, bạn có thể muốn cắt chuỗi của mình trước khi tách chuỗi:

String str = " Hello I'm your String";
String[] splitStr = str.trim().split("\\s+");

29

Tôi tin rằng việc đặt một biểu thức chính quy trong ngoặc đơn str.split sẽ giải quyết được vấn đề. Phương thức Java String.split () dựa trên các biểu thức chính quy, vì vậy điều bạn cần là:

str = "Hello I'm your String";
String[] splitStr = str.split("\\s+");

12

Sử dụng Stringutils.split()để phân chia chuỗi bằng cách bước trắng. Ví dụ StringUtils.split("Hello World")trả về "Xin chào" và "Thế giới";

Để giải quyết trường hợp đã đề cập, chúng tôi sử dụng phương pháp phân tách như thế này

String split[]= StringUtils.split("Hello I'm your String");

Khi chúng ta in mảng phân tách, đầu ra sẽ là:

xin chào

Tôi là

của bạn

Chuỗi

Để xem ví dụ hoàn chỉnh, hãy kiểm tra tại đây



6

nếu bằng cách nào đó bạn không muốn sử dụng phương thức phân tách Chuỗi thì bạn có thể sử dụng lớp StringTokenizer trong Java dưới dạng ..

    StringTokenizer tokens = new StringTokenizer("Hello I'm your String", " ");
    String[] splited = new String[tokens.countTokens()];
    int index = 0;
    while(tokens.hasMoreTokens()){
        splited[index] = tokens.nextToken();
        ++index;
    }

Có khả năng ném ngoại lệ ArrayIndexOutofBound.
Ajay Takur

2
Không, điều này sẽ không ném "ArrayIndexOutofBound" vì tôi đã khai báo kích thước mảng theo số lượng mã thông báo được tìm thấy trong Chuỗi. điều này sẽ đảm bảo rằng kích thước mảng sẽ không nhiều hơn các mã thông báo nhận được trong một chuỗi.
Muhammad Suleman

6

Hãy thử cái này

    String str = "This is String";
    String[] splited = str.split("\\s+");

    String split_one=splited[0];
    String split_second=splited[1];
    String split_three=splited[2];

   Log.d("Splited String ", "Splited String" + split_one+split_second+split_three);

4

Một cách khác sẽ là:

import java.util.regex.Pattern;

...

private static final Pattern SPACE = Pattern.compile(" ");
String[] arr = SPACE.split(str); // str is the string to be split

Nhìn thấy nó ở đây


3

OK, vì vậy chúng tôi phải chia tách vì bạn đã có câu trả lời tôi sẽ khái quát hóa nó.

Nếu bạn muốn phân tách bất kỳ chuỗi nào bằng dấu cách, dấu phân cách (ký tự đặc biệt).

Đầu tiên, loại bỏ không gian hàng đầu khi chúng tạo ra hầu hết các vấn đề.

str1 = "    Hello I'm your       String    ";
str2 = "    Are you serious about this question_  boy, aren't you?   ";

Đầu tiên loại bỏ không gian hàng đầu có thể là không gian, tab, vv

String s = str1.replaceAll("^\\s+","");//starting with whitespace one or more

Bây giờ nếu bạn muốn phân chia theo không gian hoặc bất kỳ char đặc biệt.

String[] sa = s.split("[^\\w]+");//split by any non word char

Nhưng vì w chứa [a-zA-Z_0-9], vì vậy nếu bạn muốn phân tách bằng dấu gạch dưới (_) cũng sử dụng

 String[] sa = s.split("[!,? ._'@]+");//for str2 after removing leading space

Điều đó replaceAll("^\\s+","")đã cứu ngày của tôi. Điều đó đã làm việc cho trường hợp của tôi. Cảm ơn bạn
Kostas Asargiotakis

2

Ví dụ rất đơn giản dưới đây:

Hy vọng nó giúp.

String str = "Hello I'm your String";
String[] splited = str.split(" ");
var splited = str.split(" ");
var splited1=splited[0]; //Hello
var splited2=splited[1]; //I'm
var splited3=splited[2]; //your
var splited4=splited[3]; //String

1

bạn có thể tạo chuỗi bằng cách sử dụng mã dưới đây

   String thisString="Hello world";

   String[] parts = theString.split(" ");

   String first = parts[0];//"hello"

    String second = parts[1];//"World"

0

Đây là một phương pháp để cắt một Chuỗi có "," hoặc khoảng trắng

private String shorterName(String s){
        String[] sArr = s.split("\\,|\\s+");
        String output = sArr[0];

        return output;
    }

0

Vì đã được một lúc kể từ khi những câu trả lời này được đăng, đây là một cách khác hiện tại để làm những gì được hỏi:

List<String> output = new ArrayList<>();
try (Scanner sc = new Scanner(inputString)) {
    while (sc.hasNext()) output.add(sc.next());
}

Bây giờ bạn có một danh sách các chuỗi (được cho là tốt hơn một mảng); nếu bạn cần một mảng, bạn có thể làmoutput.toArray(new String[0]);


0

Không chỉ không gian trắng, mà giải pháp của tôi cũng giải quyết các nhân vật vô hình là tốt.

str = "Hello I'm your String";
String[] splited = str.split("\p{Z}");

-1

Đơn giản để nhổ chuỗi theo không gian

    String CurrentString = "First Second Last";
    String[] separated = CurrentString.split(" ");

    for (int i = 0; i < separated.length; i++) {

         if (i == 0) {
             Log.d("FName ** ", "" + separated[0].trim() + "\n ");
         } else if (i == 1) {
             Log.d("MName ** ", "" + separated[1].trim() + "\n ");
         } else if (i == 2) {
             Log.d("LName ** ", "" + separated[2].trim());
         }
     }
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.