2013-09-06 41 views
5

Tôi phải lấy một tệp đầu vào và nối một số ở cuối tên của nó để sử dụng làm tệp đầu ra. Để đạt được điều này, tôi sử dụng đoạn mã sau:Tại sao tôi không thể sử dụng "." như một dấu phân cách trong hàm split()?

String delimiter = "."; 
String[] splitInput = inputLocation.split(delimiter); 
String outputLocation = splitInput[0]; 

và tôi nhận được ngoại lệ sau đây:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 

tôi đã thêm các tuyên bố sau để kiểm tra độ dài của mảng splitInput, và tôi nhận được 0 như đầu ra.

System.out.println(splitInput.length); 

Sau đó, tôi đã sử dụng ".x" làm dấu phân cách (tệp của tôi là .xls). Tôi có thể sử dụng ".x" và đạt được mục đích của mình nhưng tôi tò mò tại sao sẽ không "." công việc?

+3

hãy thử sử dụng "\". thay thế. Tôi không ở một nơi mà tôi có thể kiểm tra nó, nhưng tôi nghĩ rằng phân chia mong đợi một regex, và. ký tự đại diện cho bất kỳ ký tự nào. – Kylar

+0

@LuiggiMendoza, cảm ơn. Tôi đã có câu trả lời của tôi ở đó .. – DT7

+0

@Kylar, Tên tệp của tôi giống như c: /temp/sample.xsl .. Tôi cần c:/temp/sample và thêm một số như 123 và sau đó thêm .xls vào nó. Ban đầu tôi nghĩ tôi có thể chia thành hai phần. và thêm số ở giữa .. Bây giờ tôi chia nhỏ bằng cách sử dụng ".x" và lấy phần đầu tiên, thêm số và có phần mở rộng được mã hóa cứng.Cảm ơn :) – DT7

Trả lời

11

Chức năng split sử dụng cụm từ thông dụng, bạn phải thoát khỏi "." với "\"

Khi sử dụng cụm từ thông dụng "." có nghĩa là bất kỳ nhân vật nào. Hãy thử điều này

String delimiter = "\\.x"; 

Cũng cần phải đề cập rằng \ trong java cũng là ký tự đặc biệt được sử dụng để tạo các ký tự đặc biệt khác. Vì vậy, bạn phải thoát khỏi \ với \ khác do đó "\\.x"


bạn Theres một số tài liệu tuyệt vời trong các tài liệu Java về tất cả các ký tự đặc biệt và những gì họ làm:

Java 8 Docs
Java 7 Docs
Java 6 Docs

1

. được coi là bất kỳ ký tự nào trong regex. Vui lòng sử dụng ký tự thoát \ (cũng cần phải được thoát là \\), nếu bạn muốn ghi đè ý nghĩa đặc biệt của nó.

1

String.split() hy vọng một regex là đầu vào. Trong các biểu thức Java, ký tự . là một ký tự đặc biệt. Do đó, câu lệnh tách của bạn không hoạt động theo cách bạn mong đợi. Bạn nên thoát khỏi "." dưới dạng \\..

Các vấn đề liên quan