When you use split
, have to specify the string that will be used to split.
How you used " -> ;"
, he will try to find exactly this stretch (space, hyphen, >
, spaces and semicolons). But this sequence does not exist in your file, because after ->
has a number, so the split
won’t make the break the way you need it.
One way to solve is to do the break only by ->
, then in the number you eliminate the ;
manually. And finally, you convert the string to number and sum to total:
double total = 0;
try (BufferedReader leitor = new BufferedReader(new FileReader("CARTEIRA\\Chart of accounts\\PlanConCxToReceive.txt"))) {
String texto;
while ((texto = leitor.readLine()) != null) {
String valor = texto.split(" -> ")[1];
total += Double.parseDouble(valor.substring(0, valor.length() - 1));
}
}
System.out.println(total); // 1200.0
In the case, valor.substring(0, valor.length() - 1)
eliminates the last character (which is the ;
), and Double.parseDouble
converts the string to number. I chose this class because in the file the numbers have a decimal place, and parseDouble
can handle it (Integer.parseInt
would make a mistake, for example).
I also put the BufferedReader
in a block Try-with-Resources (available from Java 7), which ensures that the file will be closed at the end.
And the program does not validate: it assumes that it will always have the ->
and the second position always has a number. But if you want to validate, you can do something like this:
double total = 0;
try (BufferedReader leitor = new BufferedReader(new FileReader("CARTEIRA\\Chart of accounts\\PlanConCxToReceive.txt"))) {
String texto;
while ((texto = leitor.readLine()) != null) {
String[] partes = texto.split(" -> ");
if (partes.length > 1) {
String valor = partes[1];
try {
total += Double.parseDouble(valor.substring(0, valor.length() - 1));
} catch (NumberFormatException e) {
// não é número - mostrar alguma mensagem de erro, ignorar, etc
}
} else {
// linha não tem "->" - mostrar alguma mensagem de erro, ignorar, etc
}
}
}