Creo lo siguiente para truncar una cadena en java a una nueva cadena con un número dado de bytes.Truncando cadenas por 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;
Esto es lo primero que vino a mi mente, y sé que podría mejorar en él. Vi otra publicación que estaba haciendo una pregunta similar allí, pero estaban truncando cadenas usando los bytes en lugar de String.substring. Creo que preferiría usar String.substring en mi caso.
EDITAR: Acabo de eliminar la referencia UTF8 porque también podría hacer esto para diferentes tipos de almacenamiento.
Me gustaría reformular su problema. Está intentando encajar una cadena en una matriz de bytes que no puede ser mayor que maxUTF8BytesLength. Desea usar UTF-8 para la codificación. Desea copiar la mayor cantidad de caracteres posible. ¿Correcto? – gawi
correcto, yo diría que es correcto. También me gustaría hacerlo de manera eficiente. – stevebot
Acabo de editar la pregunta para no hacer referencia a UTF-8. Lo siento, fue engañoso. – stevebot