Tôi tạo đoạn mã sau để cắt ngắn chuỗi trong java thành chuỗi mới với số byte nhất định.Cắt ngắn chuỗi bằng Bytes
String truncatedValue = "";
String currentValue = string;
int pivotIndex = (int) Math.round(((double) string.length())/2);
while(!truncatedValue.equals(currentValue)){
currentValue = string.substring(0,pivotIndex);
byte[] bytes = null;
bytes = currentValue.getBytes(encoding);
if(bytes==null){
return string;
}
int byteLength = bytes.length;
int newIndex = (int) Math.round(((double) pivotIndex)/2);
if(byteLength > maxBytesLength){
pivotIndex = newIndex;
} else if(byteLength < maxBytesLength){
pivotIndex = pivotIndex + 1;
} else {
truncatedValue = currentValue;
}
}
return truncatedValue;
Đây là điều đầu tiên tôi nghĩ đến và tôi biết mình có thể cải thiện nó. Tôi thấy một bài đăng khác đã hỏi một câu hỏi tương tự ở đó, nhưng họ đã cắt xén chuỗi bằng cách sử dụng các byte thay vì String.substring. Tôi nghĩ rằng tôi thà sử dụng String.substring trong trường hợp của tôi.
EDIT: Tôi vừa xóa tham chiếu UTF8 vì tôi muốn có thể thực hiện việc này cho các loại lưu trữ khác nhau.
Tôi sẽ nói lại vấn đề của bạn. Bạn đang cố gắng để phù hợp với một chuỗi thành một mảng byte mà không thể lớn hơn maxUTF8BytesLength. Bạn muốn sử dụng UTF-8 cho mã hóa. Bạn muốn sao chép nhiều ký tự nhất có thể. Chính xác? – gawi
đúng, tôi sẽ nói điều đó là chính xác. Tôi cũng muốn làm điều đó một cách hiệu quả. – stevebot
Tôi vừa chỉnh sửa câu hỏi để không tham khảo UTF-8. Xin lỗi về điều đó, nó đã gây hiểu nhầm. – stevebot