2017-07-08 23 views
5

Tôi đang cố gắng chia chuỗi thành nhiều chuỗi nhưng thay vì sử dụng chuỗi chỉ là một mẫu regex đơn giản, tôi đang cố sử dụng mẫu regex sẽ tách chuỗi thành các chuỗi khác nhau nếu nó phát hiện các ký tự nhất định, nhưng các ký tự khác nhau. Thay vì tách chuỗi thành các chuỗi khác nhau, nó cho tôi mỗi và mọi ký tự riêng lẻ trong chuỗi đã nói.Chia chuỗi thành nhiều chuỗi bằng cách sử dụng Regex với các nhóm chụp khác nhau

String[] splitstr = line.split("([&]{2})?([|]{2})?(!=)?"); 

Sử dụng dòng trên, tôi đã một biến gọi là line đó, như một ví dụ, tôi đang đưa dòng này từ một tập tin:

:if[input=right || input=Right]: 

Tôi chỉ tự hỏi nếu có một cách để làm chia rẽ này vào

":if[input=right", "input=Right]:" 

Và nếu tôi đặt trong một dòng như thế này:

:if[input=right || input=Right && input != null]: 

Vì vậy mà nó tách ra thành

":if[input=right", "input=Right", "input != null]:" 

Tôi đã sử dụng String#split(regex) cho biểu tượng || và nó chỉ làm việc tốt, nhưng bây giờ tôi muốn nó chia bất cứ nơi nào mà || hoặc && hoặc != và tôi muốn tôi mã hiệu quả và sạch sẽ và dễ đọc.

Trả lời

2

Lớp java bên dưới sẽ chia chuỗi ví dụ của bạn thành các phần bạn quan tâm. Mã sẽ chia chuỗi gốc ở tất cả '||' và '& &' các dấu phân cách, trên toàn cầu. Tức là, nếu bạn có nhiều hơn một '||' hoặc nhà điều hành '& &' trong chuỗi ban đầu của bạn, mỗi phần sẽ được tách ra.

Một điều cần lưu ý là cần phải thoát (\) các ký tự đặc biệt. Trong Java bạn cũng cần phải thoát khỏi sự trốn thoát, vì vậy bạn cần 2 dấu gạch chéo ngược để có một chữ trong chuỗi của bạn.

Đây là một trang web tuyệt vời để kiểm tra ra mã regex ... Regular Expressions 101

public class splitStrRegex { 

    public static void main(String[] args) { 

     String myStr = ":if[input=right || input=Right && input != null]:"; 
     String[] myStrings = myStr.split("\\|\\||&&"); 
     for(int i = 0; i < myStrings.length; i++) { 
      System.out.println(myStrings[i].trim()); 
     } 
    } 
} 

Output:

:if[input=right 
input=Right 
input != null]: 
+0

Oh my god Tôi đã suy nghĩ rằng có một số sử dụng đặc biệt cho các biểu tượng ống , Tôi vui vì bạn đã nói với tôi để thoát khỏi đường ống! Cảm ơn! –

+0

Vui vì tôi có thể giúp @AlexCouch. Đừng quên bỏ phiếu cho câu trả lời yêu thích của bạn, và cảm ơn cho câu hỏi tuyệt vời quá! – MJFoster

0

Đây là một câu hỏi rất thú vị. Có rất nhiều câu trả lời cho điều đó trên trang web như: Java String.split() Regex Ngoài ra, nó rất dễ dàng để kiểm tra, như:

public class Reg { 

    public static void main(String args[]) { 
     String string = "00!=4-0||34 & 55!=6"; 
     String[] parts = string.split("[&||!=]"); 
     for (int i = 0; i < parts.length; i++) { 
      System.out.println("Part: " + parts[i]); 
     } 
    } 
} 

OUTPUT:

Part: 00 
Part: 
Part: 4-0 
Part: 
Part: 34 
Part: 55 
Part: 
Part: 6 

Nhưng vấn đề với biểu tượng "& &", ví dụ: đối với:

String string = "00!=4-0||34 && 55!=6"; 
    String[] parts = string.split("[&&||!=]"); 

OUTPUT:

Part: 00 
Part: 
Part: 4-0 
Part: 
Part: 34 && 55 
Part: 
Part: 6 

tôi có thể đoán rằng chúng ta cần phải hiểu & & trong việc giải thích khác, ví dụ:

public class Reg { 

    public static void main(String args[]) { 
     String string = "00!=4-0||34 && 55!=6"; 
     String[] parts = string.split("[&^&||!=]"); 
     for (int i = 0; i < parts.length; i++) { 
      System.out.println("Part: " + parts[i]); 
     } 
    } 
} 

OUTPUT:

Part: 00 
Part: 
Part: 4-0 
Part: 
Part: 34 
Part: 
Part: 55 
Part: 
Part: 6 
Các vấn đề liên quan