2011-01-25 71 views
5

Cách tốt nhất để xử lý các hằng số chuỗi lớn trong Java là gì?Xử lý các hằng số chuỗi lớn trong Java

Hãy tưởng tượng rằng tôi có một trận đấu thử nghiệm cho SOAP và tôi muốn gửi chuỗi sau:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Body> 
     <QuoteRequest xmlns="https://www.bcponline.co.uk"> 
      <header> 
       <SourceCode>BN325</SourceCode> 
       <MessageSource>B2B3</MessageSource> 
       <Profile>B08A</Profile> 
       <Password>AP3U86V</Password> 
       <OperatorID>flightline</OperatorID> 
       <ShowWebOptions>0</ShowWebOptions> 
      </header> 
      <serviceSelection> 
       <ServiceProviderCode></ServiceProviderCode> 
       <ProductCode>CarParking</ProductCode> 
       <IATACode>lgw</IATACode> 
      </serviceSelection> 
      <quoteDetails> 
       <DepartureDate>21-Jun-2005</DepartureDate> 
       <DepartureTime>07:00</DepartureTime> 
       <ReturnDate>28-Jun-2005</ReturnDate> 
       <ReturnTime>07:00</ReturnTime> 
       <QuoteReference></QuoteReference> 
       <NoPax>1</NoPax> 
      </quoteDetails> 
      <sPostCode></sPostCode> 
     </QuoteRequest> 
    </soap:Body> 
</soap:Envelope> 

Tôi không muốn đặt dấu ngoặc kép và ưu điểm xung quanh mỗi dòng. Nếu tôi đặt nó trong một tập tin, nó thêm mã và nó sẽ là hơi khó để đặt một số chuỗi trong cùng một tập tin. XML có vấn đề thoát văn bản (tôi phải sử dụng CDATA ugliness). Có cách nào dễ hơn không?

+0

đề xuất không phù hợp: cách mã hóa ngắt dòng dưới dạng '\ n'? –

+1

Bạn có thể đặt nó vào tập tin thuộc tính. Vẫn phải viết mã, nhưng không phải là nhiều và bạn có thể đặt nhiều hơn một chuỗi trong nó – jny

+0

Liên quan: http://stackoverflow.com/questions/782810/working-with-large-text-snippets-in-java-source –

Trả lời

-1

Điều gì về việc sử dụng một StringBuilder? Bạn luôn có thể sử dụng StringBuilder.toString() để lấy String ...

+0

Điều đó nghe còn khó hơn việc sử dụng dấu ngoặc kép và dấu cộng. Ít nhất thì máy tính sẽ xử lý nhanh hơn. – User1

+1

@ User1 - nó thậm chí sẽ không nhanh hơn. Các phần nhỏ của chuỗi sẽ nằm trong tệp lớp của bạn, mà sẽ phải được tập hợp trong thời gian chạy, thay vì chỉ có toàn bộ chuỗi được biên dịch trước được biên dịch. –

3

Nếu các chuỗi không liên quan, bạn có thể đặt chúng trong các tệp riêng biệt ngay cả khi nó có nhiều tệp (vấn đề với điều đó là gì?).

Nếu bạn nhấn mạnh vào một tệp, bạn có thể tìm ra một dấu phân cách duy nhất, nhưng bạn sẽ trả giá khi cố gắng truy cập ngẫu nhiên vào một mục cụ thể.

Tệp dữ liệu hầu như luôn luôn được mở rộng (có thể trong một thư mục riêng) và đọc khi cần, thay vì mã hóa cứng vào mã. Nó sạch hơn, giảm kích thước mã, giảm nhu cầu biên dịch và cho phép bạn sử dụng cùng một tệp dữ liệu cho nhiều thử nghiệm. Hầu hết các đồ đạc thử nghiệm cũng như các công cụ xây dựng và tích hợp đều hỗ trợ các tệp bên ngoài.

Hoặc, bạn có thể viết mã hoặc người xây dựng xây dựng SOAP từ các đối số, làm cho điều này ngắn gọn hơn nhiều (nếu bạn sẵn sàng trả chi phí thời gian chạy). (Correction: Tôi thấy bạn thay đổi mẫu của bạn, điều này sẽ khó chịu để tự động tạo ra).

+0

* Nếu bạn nhấn mạnh vào một tệp, bạn có thể đưa ra một delimiter * - Tôi đang sử dụng nó với một dòng trống như dấu phân tách, nó rất dễ đọc. * Nhưng bạn sẽ phải trả giá khi cố gắng truy cập ngẫu nhiên vào một mục cụ thể. * - Điều này thường không bao giờ xảy ra, anh ấy đang nghĩ đến việc đưa nó vào chương trình, vì vậy nó chắc chắn không theo thứ tự GB, vì vậy anh ấy có thể giữ nó trong trí nhớ. – maaartinus

+0

@maaartinus: Tôi sẽ rất cẩn thận về việc sử dụng một dòng trống làm dấu phân cách trong một định dạng cho phép các dòng trống dưới dạng khoảng trắng (có đúng không?). Phải mất một lỗi kết hợp hoặc cắt dán bất cẩn để làm mọi thứ lộn xộn. – Uri

+0

Chắc chắn, nhưng tôi cẩn thận: Trên thực tế, ở định dạng của tôi, dòng đầu tiên của một "đoạn" là tên của nó. Tôi sử dụng một enum cho tất cả các tên. Trong trường hợp tôi mess nó lên, có một tên mất tích hoặc một cái gì đó như thế. Bất kỳ tên bị thiếu, trùng lặp hoặc không xác định nào làm tăng ngoại lệ trong khi tải. – maaartinus

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