I create the following for truncating a string in java to a new string with a given number of 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;
This is the first thing that came to my mind, and I know I could improve on it. I saw another post that was asking a similar question there, but they were truncating Strings using the bytes instead of String.substring. I think I would rather use String.substring in my case.
EDIT: I just removed the UTF8 reference because I would rather be able to do this for different storage types as well.
Why not convert to bytes and walk forward–obeying UTF8 character boundaries as you do it–until you’ve got the max number, then convert those bytes back into a string?
Or you could just cut the original string if you keep track of where the cut should occur:
Note: edited to fix bugs on 2014-08-25