Embora use dois arrays, acho que o método que fiz parece ser mais fácil de entender... Ou não?
static long converteStringValorNumerico(String x){
char[] numeros = new char[x.length()];
int[] valorNum = new int[x.length()];
//extraindo
for (int i = 0;i<x.length();i++){
numeros[i]=x.charAt(i);
valorNum[i] = numeros[i]-'0';
}
//convertendo
long num = 0;
for(int i=valorNum.length-1, j=0; i>=0 ;i--, j++){
num = (long) (num + (valorNum[i] * Math.pow(10,j)));
}
return num;
}