2015-04-15 1 views
0

J'ai besoin d'aide pour comprendre ce problème que j'ai rencontré. Avoir lu un fichier txt avec un lecteur de tampon et essayer d'utiliser un StringTokenizer. La chaîne je l'ai comme ça, où du texte d'abord et quelques chiffres après. J'ai seulement besoin de chiffres, et je veux sauter "Texte".StringTokennizer, prenez seulement les 3 derniers éléments sur 4

Test 2 5 1 

Mon code:

// Check if the graph contains an cycle 
    StringTokenizer st1 = new StringTokenizer(br.readLine()); 
    Graph.checkForCycle(null, Integer.parseInt(st1.()), Integer.parseInt(st1.nextToken()), Integer.parseInt(st1.nextToken()));  

Comme vous pouvez le voir, il y a 4 jeux ici et je veux les 3 derniers à envoyer avec le paramenter quand j'appelle la méthode Graph.checkForCycle()

J'espère que quelqu'un peut vous aider.

Répondre

1

Vous devez jeter le premier:

StringTokenizer st1 = new StringTokenizer(br.readLine()); 
st1.nextToken(); // "Text" - do nothing with it 
int i1 = Integer.parseInt(st1.nextToken()); // 2 
// ... 
Graph.checkForCycle(null, i1, i2, i3);  

Vous pouvez également utiliser le scanner qui prend en charge la conversion:

Scanner sc = new Scanner(br.readLine()); 
sc.next(); // "Text" 
int i1 = sc.nextInt(); 
// ... 
0

A partir de Java 1.5, le soleil (il est maintenant oracle) découragé l'utilisation de StringTokenizer.

Ainsi, dans la javadoc de StringTokenizer, il est dit:

StringTokenizer est une classe héritage qui est retenu pour des raisons de compatibilité bien que son utilisation est déconseillée dans le nouveau code. Il est recommandé que quiconque recherche cette fonctionnalité utilise à la place la méthode split de la chaîne ou du package java.util.regex.

Cependant, il n'est pas mentionné que vous pouvez également utiliser la classe Scanner.

Exemple avec la méthode split String:

String[] args = br.readLine().split("\\s"); // Split on whitespaces 
Graph.checkForCycle(null, args[1], args[2], args[3]); 

Exemple avec la classe java.util.Scanner:

Scanner scanner = new Scanner(br.readLine()); 
scanner.next(); //skip the first 
Graph.checkForCycle(null, scanner.next(), scanner.next(), scanner.next()); 

Ce sont des petits exemples Juste, ne les utilisent pas comme il est. c'est-à-dire: vous voudrez utiliser la méthode "hasNext" au cas où le nombre de mots dans la ligne de texte peut varier.