Я создаю следующее для обрезания строки в java для новой строки с заданным количеством байтов.Усечение строк по байтам
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;
Это первое, что мне пришло в голову, и я знаю, что смогу улучшить его. Я видел еще одно сообщение, которое задавало аналогичный вопрос, но они усекали строки, используя байты вместо String.substring. Думаю, я предпочел бы использовать String.substring в моем случае.
EDIT: Я просто удалил ссылку UTF8, потому что я предпочел бы сделать это для разных типов хранения.
Я бы перефразировать вашу проблему. Вы пытаетесь поместить строку в массив байтов, который не может превышать maxUTF8BytesLength. Вы хотите использовать UTF-8 для кодирования. Вы хотите скопировать как можно больше символов. Верный? – gawi
Правильно, я бы сказал, что это правильно. Я также хотел бы сделать это эффективно. – stevebot
Я только что редактировал вопрос, чтобы не ссылаться на UTF-8. Извините, что это вводит в заблуждение. – stevebot