2012-01-15 38 views
18

Tôi có chuỗi là 123dance456 mà tôi cần chia thành hai chuỗi chứa chuỗi con đầu tiên trước chuỗi con dance (ví dụ: 123) và sau phụ chuỗi dance (ví dụ: 456). Tôi cần phải tìm và giữ chúng trong các biến chuỗi riêng biệt, giả sử String firstSubString = 123; và Chuỗi secondSubString = 456;.cách tìm trước và sau chuỗi con trong một chuỗi

Có phương thức String nào đã thực hiện điều đó không?

+0

Có thể thực hiện nhưng định dạng chính xác là gì ??? ý tôi là khiêu vũ sẽ luôn ở đó? –

+0

@ dku.rajkumar: Đúng vậy, chuỗi con "khiêu vũ" luôn ở đó. 'split()' nên thực hiện thủ thuật. Tôi nên tưởng tượng ra một phương pháp như thế này rồi. Tôi nghĩ rằng tôi có thể phải viết một regex cho nó.Cảm ơn :) – skip

+0

sau đó không cần regex, chỉ cần sử dụng String [] str =; string.split ("dance"); như đã đề cập câu trả lời –

Trả lời

39

Bạn có thể sử dụng String.split(String regex). Chỉ cần làm một cái gì đó như thế này:

String s = "123dance456"; 
String[] split = s.split("dance"); 
String firstSubString = split[0]; 
String secondSubString = split[1]; 

Xin lưu ý rằng nếu "dance" xảy ra nhiều hơn một lần trong chuỗi gốc, split() sẽ chia theo từng xảy ra - đó là lý do tại sao giá trị trả về là một mảng.

16

Bạn có thể làm điều này:

String str = "123dance456"; 
String substr = "dance"; 
String before = str.substring(0, str.indexOf(substr)); 
String after = str.substring(str.indexOf(substr) + substr.length()); 

Hoặc

String str = "123dance456"; 
String substr = "dance"; 
String[] parts = str.split(substr); 
String before = parts[0]; 
String after = parts[1]; 

Cũng cần lưu ý rằng câu trả lời thứ hai không hoạt động nếu chúng tôi có nhiều hơn một lần xuất hiện của chuỗi con. Cuối cùng, nếu chúng ta chỉ muốn là người đầu tiên được công nhận, nó sẽ được an toàn hơn để gọi chia tay với một giới hạn:

String[] parts = str.split(substr, 2); 

mà đảm bảo rằng các mảng được trả về có ít nhất hai yếu tố. Ngoài ra, vì split sẽ diễn giải đầu vào của nó dưới dạng cụm từ thông dụng, chúng tôi phải cảnh giác với cú pháp biểu thức chính quy không hợp lệ. Như vậy, tôi sẽ nhiều hơn là giải pháp đầu tiên, vì nó hoạt động không phụ thuộc vào thành phần của chuỗi con ban đầu.

Để thực hiện các câu trả lời đầu tiên hiệu quả hơn - vì nó là câu trả lời ưa thích của tôi - sau đó, chúng tôi sẽ cần phải nhớ vị trí của chuỗi con:

final int position = str.indexOf(substr); 
if (position >= 0) { 
    //if the substring does occur within the string, set the values accordingly 
    before = str.substring(0, position); 
    after = str.substring(position + substr.length()); 
} else { 
    //otherwise, default to the empty string (or some other value) 
    before = ""; 
    after = ""; 
} 

Nó luôn luôn trả tiền để chú ý đến những chút trường hợp cạnh.

+0

'phần' sẽ là một' Chuỗi [] ' –

+0

Sẽ không phân chia trả về một mảng? –

+0

Vâng, đó sẽ là xấu của tôi. –

1
String[] data = new String("123dance456").split("dance"); 
4

Cách dễ nhất là sử dụng phương thức split như các câu trả lời khác được đề xuất. Bạn cũng có thể sử dụng một Matcher và một Pattern cho một cách tiếp cận tổng quát hơn:

String str = "123dance456"; 
String splitter = "dance"; 
Pattern p = Pattern.compile("(.*?)" + splitter + "(.*)"); 
Matcher m = p.matcher(str); 
if (m.matches()) { 
    firstSubString = m.group(1); // may be empty 
    secondSubString = m.group(2); // may be empty 
} else { 
    // splitter not found in str 
} 
4

Nếu bạn đang sử dụng commons-lang thấy StringUtils.substringAfter()

0

Sử dụng Scanner là một lựa chọn tốt đẹp:

Scanner scanner = new Scanner("123dance456").useDelimiter("dance"); 
if (scanner.hasNext()) 
    System.out.println(scanner.next()); 
if (scanner.hasNext()) 
    System.out.println(scanner.next()); 

Thật thuận tiện khi xử lý mã thông báo dưới dạng luồng và chỉ cần hỏi qua hasNext() nếu có mã thông báo mới. Ngoài ra, bạn có được chuyển đổi tốt đẹp từ số Scanner, thậm chí được bản địa hóa, như:

Scanner scanner = new Scanner("123dance456").useDelimiter("dance"); 
System.out.println(scanner.nextDouble() * scanner.nextDouble()); 
Các vấn đề liên quan