2010-10-07 51 views
24

Có một cái gì đó giống như một C# chuỗi con cho Java? Tôi đang tạo một ứng dụng di động cho thiết bị Blackberry và do hạn chế về màn hình, tôi chỉ có thể đủ khả năng hiển thị 13 chữ cái cộng với ba dấu chấm cho dấu chấm lửng.Cho một chuỗi trong Java, chỉ cần mang các chữ cái X đầu tiên

Bất kỳ đề xuất nào về cách thực hiện điều này?

Tôi cần xương trần Java và không phải là một số mẹo ưa thích bởi vì tôi nghi ngờ một thiết bị di động có quyền truy cập vào một khung hoàn chỉnh. Ít nhất trong kinh nghiệm của tôi làm việc với Java ME một năm trước đây.

+0

http://download.oracle.com/javase/6/docs/api/. Bạn nên tìm các tài liệu cho bất kỳ khung công tác nào được cài đặt trên nền tảng của bạn và tiện dụng. –

Trả lời

47

Bạn có thể thực hiện chính xác những gì mình muốn với String.substring().

String str = "please truncate me after 13 characters!"; 
if (str.length() > 16) 
    str = str.substring(0, 13) + "..." 
+1

bạn mena nếu (str.length()> 13) phải không? Trong một cách nào đó nếu str.length là 14, wont bạn có một chỉ số ra khỏi ràng buộc? : P – Paolo

34
String foo = someString.substring(0, Math.min(13, someString.length())); 

Edit: Chỉ cần để tham khảo chung, tính đến ổi 16.0 bạn có thể làm:

String truncated = Ascii.truncate(string, 16, "..."); 

để cắt ngắn tại một chiều dài tối đa 16 ký tự với một dấu chấm lửng.

Ngoài

Lưu ý, mặc dù, rằng cắt bỏ một chuỗi để hiển thị bởi nhân vật không phải là một hệ thống tốt cho bất cứ điều gì nơi i18n có thể cần phải được xem xét. Có (ít nhất) một vài vấn đề khác với nó:

  1. Bạn có thể muốn lấy ranh giới từ và/hoặc khoảng trắng để tránh cắt xén ở một nơi khó xử.
  2. Tách cặp thay thế (mặc dù điều này có thể tránh được bằng cách kiểm tra xem ký tự bạn muốn cắt bớt là cặp đầu tiên của cặp thay thế).
  3. Splitting một nhân vật và một nhân vật kết hợp mà sau nó (ví dụ như một e theo sau là một nhân vật kết hợp mà đặt một giọng trên e đó.)
  4. Sự xuất hiện của một nhân vật có thể thay đổi tùy thuộc vào nhân vật mà sau nó trong một số ngôn ngữ, vì vậy chỉ cắt xén nhân vật đó sẽ tạo ra thứ gì đó thậm chí không giống như bản gốc.

Vì những lý do này (và những thứ khác), sự hiểu biết của tôi là thực hành tốt nhất để cắt ngắn hiển thị trong giao diện người dùng thực sự mờ dần việc hiển thị văn bản ở đúng điểm trên màn hình thay vì cắt ngắn chuỗi cơ bản .

+0

Vâng, điều đó thật tuyệt vời. Cảm ơn nhiều! :) Nhận một ngoại lệ indexOutOfBounds mặc dù tôi biết Math.min làm gì và nó sẽ hoạt động ...hãy để tôi kiểm tra điều này với trình gỡ lỗi. –

+1

@Colin, với logic này, bạn không biết liệu bạn có cần hình elip hay không. – jjnguy

+0

@Justin: True ... Tôi vừa đưa ra một ví dụ nhanh về việc nhận được một chuỗi con với các chữ cái X đầu tiên. Ví dụ của bạn chắc chắn áp dụng nhiều hơn cho tình huống cụ thể của mình. – ColinD

3

Bất cứ khi nào có được một số hoạt động mà bạn sẽ nghĩ là một điều rất phổ biến để làm, nhưng các Java API đòi hỏi bạn phải kiểm tra giới hạn, bắt ngoại lệ, sử dụng Math.min(), vv (tức là đòi hỏi làm việc nhiều hơn bạn sẽ mong đợi), hãy kiểm tra Apache commons-lang. Nó hầu như luôn luôn ở định dạng ngắn gọn hơn. Trong trường hợp này, bạn sẽ sử dụng StringUtils#substring trường hợp lỗi xử lý cho bạn. Dưới đây là những gì nó javadoc nói:

Gets a substring from the specified String avoiding exceptions. 

A negative start position can be used to start n characters from the end of the String. 

A null String will return null. An empty ("") String will return "". 

StringUtils.substring(null, *) = null 
StringUtils.substring("", *)  = "" 
StringUtils.substring("abc", 0) = "abc" 
StringUtils.substring("abc", 2) = "c" 
StringUtils.substring("abc", 4) = "" 
StringUtils.substring("abc", -2) = "bc" 
StringUtils.substring("abc", -4) = "abc" 
+3

"Tôi cần xương trần Java và không phải một số mẹo ưa thích bởi vì tôi nghi ngờ một thiết bị di động có quyền truy cập vào một khung hoàn chỉnh ..." –

0
String str = "This is Mobile application." 
System.out.println(str.subSequence(0, 13)+"..."); 
+0

Vì vậy, giải pháp này cũng ném một chỉ mục ra khỏi giới hạn cho các chuỗi ngắn – Elemental

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