chuỗi phân tách chỉ trong trường hợp đầu tiên - java


145

Tôi muốn tách một chuỗi bằng '=' charecter. Nhưng tôi muốn nó chỉ phân chia lần đầu tiên. Làm thế nào tôi có thể làm điều đó ? Dưới đây là một ví dụ JavaScript cho '_' char nhưng nó không hoạt động đối với tôi chỉ phân tách chuỗi trong trường hợp đầu tiên của ký tự được chỉ định

Thí dụ :

apple=fruit table price=5

Khi tôi thử String.split ('='); nó cho

[apple],[fruit table price],[5]

Nhưng tôi cần

[apple],[fruit table price=5]

Cảm ơn


Bạn không cần phải trốn thoát =.
Rohit Jain

Câu trả lời:


282
string.split("=", 2);

Như String.split(java.lang.String regex, int limit)giải thích:

Mảng được trả về bởi phương thức này chứa mỗi chuỗi con của chuỗi này được kết thúc bởi một chuỗi con khác khớp với biểu thức đã cho hoặc bị chấm dứt ở cuối chuỗi. Các chuỗi con trong mảng theo thứ tự xuất hiện trong chuỗi này. Nếu biểu thức không khớp với bất kỳ phần nào của đầu vào thì mảng kết quả chỉ có một phần tử, đó là chuỗi này.

Các limitthông số kiểm soát số lần mô hình được áp dụng và do đó ảnh hưởng đến chiều dài của mảng kết quả. Nếu giới hạn n lớn hơn 0 thì mẫu sẽ được áp dụng tối đa n - 1 lần, độ dài của mảng sẽ không lớn hơn n và mục nhập cuối cùng của mảng sẽ chứa tất cả đầu vào ngoài dấu phân cách khớp cuối cùng.

Chuỗi boo:and:foo, ví dụ, mang lại kết quả sau với các tham số sau:

Regex Limit    Result
:     2        { "boo", "and:foo" }
:     5        { "boo", "and", "foo" }
:    -2        { "boo", "and", "foo" }
o     5        { "b", "", ":and:f", "", "" }
o    -2        { "b", "", ":and:f", "", "" }
o     0        { "b", "", ":and:f" }

1
Thật khó hiểu nhưng nó chỉ hoạt động! Cảm ơn!
Clint Eastwood

4
Một số làm rõ: Giới hạn 2 sẽ trả về danh sách các yếu tố AT MOST 2. Nó có thể trả về danh sách 1 phần tử nếu không có kết quả khớp với biểu thức. Nếu có 2 kết quả khớp với biểu thức, phần tử thứ hai của mảng được trả về sẽ không bị phân tách.
modle13

11

Có, bạn có thể, chỉ cần truyền tham số nguyên cho phương thức phân tách

String stSplit = "apple=fruit table price=5"

stSplit.split("=", 2);

Dưới đây là tài liệu tham khảo tài liệu java: String # split (java.lang.String, int)


5

Như nhiều câu trả lời khác cho thấy cách tiếp cận giới hạn, Đây có thể là một cách khác

Bạn có thể sử dụng phương thức indexOf trên Chuỗi sẽ trả về lần xuất hiện đầu tiên của ký tự đã cho, Sử dụng chỉ mục đó bạn có thể nhận được đầu ra mong muốn

String target = "apple=fruit table price=5" ;
int x= target.indexOf("=");
System.out.println(target.substring(x+1));

2
Điều này không phân tách nhưng trích phần thứ hai. Lấy phần đầu tiên sẽ yêu cầu một dòng mã khác ... 4 dòng so với 1 = ngón tay cái xuống
Clint Eastwood

0

Hãy thử mã này ...

Nó hoạt động.

public class Split
{
    public static void main(String...args)
    {
        String a = "%abcdef&Ghijk%xyz";
        String b[] = a.split("%", 2);

        System.out.println("Value = "+b[1]);
    }
}

0
String string = "This is test string on web";
String splitData[] = string.split("\\s", 2);

Result ::
splitData[0] =>  This
splitData[1] =>  is test string  


String string = "This is test string on web";
String splitData[] = string.split("\\s", 3);

Result ::
splitData[0] =>  This
splitData[1] =>  is
splitData[1] =>  test string on web

Theo phương thức phân chia mặc định, tạo số n của số mảng trên cơ sở regex đã cho. Nhưng nếu bạn muốn hạn chế số lượng mảng cần tạo sau khi phân tách hơn thì vượt qua đối số thứ hai dưới dạng đối số nguyên.


3
Có vấn đề gì thế? Bao gồm nhiều chi tiết hơn để làm cho câu trả lời của bạn tự giải thích!
Paresh Mayani

-2
String[] func(String apple){
String[] tmp = new String[2];
for(int i=0;i<apple.length;i++){
   if(apple.charAt(i)=='='){
      tmp[0]=apple.substring(0,i);
      tmp[1]=apple.substring(i+1,apple.length);
      break;
   }
}
return tmp;
}
//returns string_ARRAY_!

tôi thích viết phương pháp riêng :)


3
Phương pháp này không quá hữu ích, vì dấu phân tách được mã hóa cứng. Hơn nữa, việc triển khai tìm kiếm tuyến tính với vòng lặp for không mang lại lợi thế nào khi sử dụng String.indexOf để tìm vị trí của dấu tách đầu tiên. Thứ ba, không trực quan để xem có bao nhiêu phần tử String được trả về. Khi chúng ta nói về việc chia mọi thứ thành hai, hãy xem xét sử dụng kiểu dữ liệu Ghép <Chuỗi, Chuỗi> đại diện cho chính xác hai chuỗi thay vì tạo một mảng.
Gee Bee
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.