Lire les valeurs de chaîne au format Java, Groovy
Je me demandais si il n'y a aucune bonne façon comment lire un des attributs de mise en forme de chaîne en Groovy, ou même en Java.
J'ai une chaîne de caractères contenant certains attributs séparés par un espace. Par exemple "2.1 20 quelque Chose de vrai". L'ordre est fixe et l'attribut "type" est connu (pour le premier exemple est Float, la seconde est de type Entier, etc.). J'ai besoin de quelque chose de similaire à la Chaîne.format (), mais en sens inverse.
Je sais que je peux diviser la chaîne manuellement et de lire les valeurs, mais cela rend le code trop compliqué comme ceci:
String[] parsedText = "2.1 20 Something true".split(delimiter)
try {
firstVal = new Float(parsedText[0])
}
catch (NumberFormatException e) {
throw new RuntimeException("Bad data [0th position in data string], cannot read[{$parsedData[0]}], cannot convert to float")
}
...
Est-il un meilleur moyen? Je suis assez sûr que, au moins dans Groovy est:-)
Merci!
OriginalL'auteur kuceram | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
La Java Scanner classe a tout un tas de méthodes pour l'accaparement et de l'analyse de la prochaine partie d'une chaîne, par exemple
next()
,nextInt()
,nextDouble()
, etc.Le code ressemble à ceci:
Seule chose à se méfier de l':
next()
etnextLine()
à la fois d'obtenir de vous des chaînes, maisnext()
seulement vous obtient la chaîne, jusqu'à l'espace suivant. Si vous voulez que votre chaîne de composants pour que les espaces que vous aurez besoin de tenir compte de cela.OriginalL'auteur chm
Scanner classe de java.util devrait faire le travail pour vous. Lors de la lecture de l'entrée il y a beaucoup plus de cas dont vous avez besoin pour être pris en compte.
Dans votre cas, vous pouvez appeler scanner méthodes dans une ligne ou d'utiliser les regexp pour avoir "chaîne de format" explicitement défini et de le garder tided en un seul endroit.
De cette façon, vous pourrez bénéficier en ayant de validation à la fois.
Scanner classe dispose de différents constructeurs pour utiliser la classe avec des objets de type: Fichier, InputStream, Lisible, ReadableByteChannel et comme repéré dans l'exemple avec de la Ficelle.
Être conscient que cette classe est locale au courant de sorte qu'il peut se comporte différemment dépend des paramètres du système (certains pays utilisent le coma point au lieu de la virgule flottante, etc ...). Vous pouvez remplacer les paramètres régionaux.
Est ici référence complète: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html
OriginalL'auteur JJ Roman