J'utilise Java StreamTokenizer pour extraire les différents mots et nombres d'une chaîne, mais j'ai rencontré un problème où les nombres qui incluent des virgules sont concernés, par ex. 10.567 est lu comme 10.0 et, 567.Comment obtenir des nombres en chaîne?
Je dois également supprimer tous les caractères non numériques des numéros où ils peuvent apparaître, par ex. $ 678.00 devrait être 678.00 ou -87 devrait être 87.
Je crois que ceux-ci peuvent être atteints via les méthodes whiteSpace et wordChars mais est-ce que quelqu'un a une idée de comment le faire?
Le code StreamTokenizer de base à l'heure actuelle est la suivante:
BufferedReader br = new BufferedReader(new StringReader(text));
StreamTokenizer st = new StreamTokenizer(br);
st.parseNumbers();
st.wordChars(44, 46); // ASCII comma, - , dot.
st.wordChars(48, 57); // ASCII 0 - 9.
st.wordChars(65, 90); // ASCII upper case A - Z.
st.wordChars(97, 122); // ASCII lower case a - z.
while (st.nextToken() != StreamTokenizer.TT_EOF) {
if (st.ttype == StreamTokenizer.TT_WORD) {
System.out.println("String: " + st.sval);
}
else if (st.ttype == StreamTokenizer.TT_NUMBER) {
System.out.println("Number: " + st.nval);
}
}
br.close();
Ou quelqu'un pourrait suggérer un REGEXP pour y parvenir? Je ne suis pas sûr si REGEXP est utile ici étant donné que tout parding aurait lieu après la lecture des jetons de la chaîne.
Remerciements
Mr Morgan.
Que faut-il à '1,2,3,4'? – polygenelubricants