2011-01-27 3 views
0

Ok, l'autre jour, j'ai eu des problèmes avec le FileWriter notant le saut de ligne, mais j'ai obtenu de l'aide avec cela et l'ai résolu. Maintenant, comme avant, j'ai copié mon ancien code (fonctionne parfaitement dans l'ancien prgramme) pour lire le fichier qui est écrit. J'utilise "|" en tant que délimiteur (pieces.useDelimiter ("|");). Quand j'appelle pieces.next(), il ne fait que marquer le caractère suivant, pas la chaîne suivante jusqu'au délimiteur. Qu'est-ce que je rate? Extrait de code:Problèmes de délimiteur de scanner Android

try{ 
    mFile = new Scanner(newFile(loadPath)); 
    while(mFile.hasNextLine()){ 
     String input = mFile.nextLine(); 
     Scanner pieces = new Scanner(input); 
     pieces.useDelimiter("|"); 
     while(pieces.hasNext()){ 
      int row = Integer.valueOf(pieces.next()); 
      int col = Integer.valueOf(pieces.next()); 
      String pullPath = pieces.next(); 
      ...... 

}}

+0

Veuillez poster un peu de code pour le contexte. –

Répondre

0

La chaîne que vous passez à useDelimiter est interprété comme une expression régulière. | est un caractère spécial dans les expressions régulières, vous devez donc y échapper avec une barre oblique inverse. Et le backslash lui-même doit être échappé, afin de dépasser le compilateur Java. Ainsi, l'évolution de cette ligne comme suit devrait faire l'affaire:

pieces.useDelimiter("\\|"); 

Notez également que la chaîne retournée par pieces.next() comprend le séparateur. Je soupçonne que ces lignes:

 int row = Integer.valueOf(pieces.next()); 
     int col = Integer.valueOf(pieces.next()); 

pourrait être remplacé par:

 int row = pieces.nextInt(); 
     int col = pieces.nextInt(); 

Vous pouvez également ajuster pullPath pour couper le séparateur (s).

J'espère que cela aide.

+0

A travaillé comme un charme, merci beaucoup! avez-vous des liens vers des informations sur l'échappement? Je ne l'ai jamais vu avant ... – weh

+0

@weh: Essayez http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#101089 pour la syntaxe littérale de chaîne Java standard et http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html pour la syntaxe d'expression régulière (reportez-vous à la section "Les barres obliques inverses, les échappements et les guillemets".) –

Questions connexes