Я знаю, что это не то, на что вы надеялись, но я бы просто сделал что-то не элегантное, как это:
String str = "foo";
#define MAX_POSSIBLE_LENGTH_OF_STR 16
...
int i[MAX_POSSIBLE_LENGTH_OF_STR];
Идея состоит в том, что вы выделяете больше места для массива, чем вам действительно нужно, и простоизбегайте использования дополнительных частей массива.
В качестве альтернативы, если вы не собираетесь менять определение str
в своем исходном коде очень часто, вы можете сэкономить некоторую память, выполнив это:
String str = "foo";
#define LENGTH_OF_STR 3
...
int i[LENGTH_OF_STR];