Creo quanto segue per il troncamento di una stringa in java in una nuova stringa con un determinato numero di byte.Troncamento di stringhe per byte
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;
Questa è la prima cosa che mi è venuta in mente e so che potrei migliorare. Ho visto un altro post che stava facendo una domanda simile lì, ma stavano troncando le stringhe usando i byte invece di String.substring. Penso che preferirei usare String.substring nel mio caso.
MODIFICA: Ho appena rimosso il riferimento UTF8 perché preferirei farlo anche per diversi tipi di archiviazione.
avrei riformulare il problema. Stai tentando di inserire una stringa in un array di byte che non può essere più grande di maxUTF8BytesLength. Vuoi usare UTF-8 per la codifica. Vuoi copiare il maggior numero di caratteri possibile. Corretta? – gawi
a destra, direi che è corretto. Mi piacerebbe anche farlo in modo efficiente. – stevebot
Ho appena modificato la domanda per non fare riferimento a UTF-8. Mi dispiace, era fuorviante. – stevebot