Tôi muốn biết cách tách một chuỗi lớn thành một chuỗi các chuỗi hoặc từ nhỏ hơn. Ví dụ:Tách chuỗi thành từng từ riêng lẻ Java
Tôi muốn dắt chó đi dạo.
Tôi muốn có một chuỗi: "I"
, chuỗi khác: "want"
vv
Làm thế nào tôi sẽ làm điều này?
Tôi muốn biết cách tách một chuỗi lớn thành một chuỗi các chuỗi hoặc từ nhỏ hơn. Ví dụ:Tách chuỗi thành từng từ riêng lẻ Java
Tôi muốn dắt chó đi dạo.
Tôi muốn có một chuỗi: "I"
, chuỗi khác: "want"
vv
Làm thế nào tôi sẽ làm điều này?
Sử dụng split()
phương pháp
Ví dụ:
String s = "I want to walk my dog";
String[] arr = s.split(" ");
for (String ss : arr) {
System.out.println(ss);
}
Bạn có thể sử dụng split(" ")
phương pháp của lớp String
và có thể nhận được mỗi từ như mã đưa ra dưới đây:
String s = "I want to walk my dog";
String []strArray=s.split(" ");
for(int i=0; i<strArray.length;i++) {
System.out.println(strArray[i]);
}
Tuy nhiên, một phương pháp khác, sử dụng StringTokenizer:
String s = "I want to walk my dog";
StringTokenizer tokenizer = new StringTokenizer(s);
while(tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
ah! điều này là tốt trong trường hợp tôi không cần một mảng nhưng không phải là tokenizer trở về một mảng của mã thông báo? ý tưởng hay mặc dù –
Không, không có mảng nào được tạo ra. 'StringTokenizer' tìm kiếm các mã thông báo liên tiếp trong chuỗi và trả về từng cái một. – Kao
Giải pháp tốt, thật không may, StringTokenizer không nên được sử dụng nữa. Từ Tài liệu: StringTokenizer là lớp cũ được giữ lại vì lý do tương thích mặc dù việc sử dụng nó không được khuyến khích trong mã mới. Đó là khuyến cáo rằng bất cứ ai tìm kiếm chức năng này sử dụng phương pháp chia String hoặc gói java.util.regex thay thế. – Tomor
Một regex cũng có thể được sử dụng để chia lời. \ W có thể được sử dụng để phù hợp với nhân vật từ ([A-Za-Z0-9_]), do đó chấm câu đó được lấy ra từ các kết quả:
String s = "I want to walk my dog, and why not?";
Pattern pattern = Pattern.compile("\\w+");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
System.out.println(matcher.group());
}
Đầu ra:
I
want
to
walk
my
dog
and
why
not
Xem Java tài liệu API cho Pattern
Điều này có tạo ra các từ trống không? –
là một giải pháp tổng quát hơn (! nhưng ASCII chỉ), bao gồm bất kỳ dải phân cách khác giữa các từ (như dấu phẩy và dấu chấm phẩy), tôi đề nghị:
String s = "I want to walk my dog, cat, and tarantula; maybe even my tortoise.";
String[] words = s.split("\\W+");
Regex có nghĩa là dấu phân tách sẽ là bất kỳ thứ gì không phải là một từ [\ W], theo nhóm ít nhất một [+]. Bởi vì [+] tham lam, nó sẽ lấy ví dụ ';' và '' với nhau như một dấu phân tách.
\\ W dường như chỉ xem xét các ký tự chữ cái ASCII. Nó không thích hợp cho các ngôn ngữ có dấu trọng âm. – rghome
Cảm ơn bạn đã chỉ ra điều đó! Thay đổi câu trả lời cho phù hợp. –
Xem other answer ký tự nếu cụm từ của bạn chứa nhấn mạnh của tôi:
String[] listeMots = phrase.split("\\P{L}+");
Đây là câu trả lời hay nhất. – rghome
Để bao gồm bất kỳ dải phân cách giữa các từ (như tất cả mọi thứ trừ tất cả chữ thường và chữ cái viết hoa), chúng tôi có thể làm:
String mystring = "hi, there,hi Leo";
String[] arr = mystring.split("[^a-zA-Z]+");
for(int i = 0; i < arr.length; i += 1)
{
System.out.println(arr[i]);
}
Ở đây, regex có nghĩa là các dấu tách sẽ là bất kỳ thứ gì không phải là chữ thường hoặc chữ thường [^a-zA-Z]
, theo nhóm ít nhất một [+].
Vui lòng hiển thị * những gì bạn đã thử (ví dụ: bạn có tìm từ "tách" trong tài liệu cho chuỗi không?) –
Có, Chuỗi # split() được đặt tên rất mơ hồ :-P – maksimov