2011-10-28 33 views
146

Tôi đã chuẩn bị một đoạn mã đơn giản để tách phần sai sót khỏi ứng dụng web của tôi.Phương thức split() trong Java không hoạt động trên một dấu chấm (.)

public class Main { 

    public static void main(String[] args) throws IOException { 
     System.out.print("\nEnter a string:->"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     String temp = br.readLine(); 

     String words[] = temp.split("."); 

     for (int i = 0; i < words.length; i++) { 
      System.out.println(words[i] + "\n"); 
     } 
    } 
} 

Tôi đã thử nghiệm trong khi xây dựng một ứng dụng web JSF. Tôi chỉ muốn biết tại sao trong đoạn mã trên temp.split(".") không hoạt động. Tuyên bố,

System.out.println(words[i]+"\n"); 

không hiển thị gì trên bảng điều khiển nghĩa là nó không đi qua vòng lặp. Khi tôi thay đổi đối số của phương thức temp.split() thành các ký tự khác, nó hoạt động tốt như bình thường. Rắc rối có thể là cái gì?

+3

Thoát khỏi. Tách hoạt động trên regex –

+5

Yikes, nó * mặc định * thành cụm từ thông dụng trong Java? –

Trả lời

352

java.lang.String.split chia nhỏ thành cụm từ thông dụng và . trong cụm từ thông dụng có nghĩa là "bất kỳ ký tự nào".

Hãy thử temp.split("\\.").

+0

Nó cũng làm việc cho tôi. Tôi đã làm cho "|" nó đã làm việc với "\\ |". Cảm ơn – Bhupinder

2

Nó hoạt động tốt. Bạn đã đọc the documentation chưa? Chuỗi được chuyển thành cụm từ thông dụng.

. là ký tự đặc biệt phù hợp với tất cả ký tự nhập.

Giống như với bất kỳ ký tự biểu thức chính quy nào, bạn thoát với \. Bạn cần thêm \ để thoát chuỗi Java.

8

Hãy thử:

String words[]=temp.split("\\."); 

Phương pháp này là: ""

String[] split(String regex) 

là một char được đặt trước trong regex

52

Các documentation on split() nói:

Tách chuỗi này xung quanh các trận đấu của trao regular expression.

(tôi nhấn mạnh).

Một dấu chấm là một nhân vật đặc biệt trong cú pháp biểu thức chính quy. Sử dụng Pattern.quote() trên tham số để chia() nếu bạn muốn chia sẽ trên một chuỗi mô hình đen:

String[] words = temp.split(Pattern.quote(".")); 
+0

Luôn sử dụng Pattern.quote tốt hơn –

10

Phương pháp này có một biểu hiện thường xuyên, không phải là một chuỗi, và các dấu chấm có một ý nghĩa đặc biệt trong biểu thức thông thường . Thoát nó như vậy split("\\."). Bạn cần một dấu gạch chéo ngược hai lần, dấu gạch chéo ngược thứ hai thoát ra trước.

2
private String temp = "mahesh.hiren.darshan"; 

    String s_temp[] = temp.split("[.]"); 

    Log.e("1", ""+s_temp[0]); 
5

\\. là câu trả lời đơn giản. Đây là mã đơn giản giúp bạn.

while (line != null) { 
    //    
    String[] words = line.split("\\."); 
    wr = ""; 
    mean = ""; 
    if (words.length > 2) { 
     wr = words[0] + words[1]; 
     mean = words[2]; 

    } else { 
     wr = words[0]; 
     mean = words[1]; 
    } 
} 
Các vấn đề liên quan