Я создаю следующее для усечения строки в 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 в моем случае.
РЕДАКТИРОВАТЬ: Я только что удалил ссылку на UTF8, потому что я бы предпочел сделать это для различных типов хранения.