Question

J'ai une application Cocoa qui appelle un service Web. Quand je parse la réponse du service Web, je reçois un \ n comme le dernier caractère dans mon foundCharacters délégué pour la NSXMLParser pour chaque élément dans le fichier XML.

Lorsque je tente de faire ce qui suit:

if (![string isEqualToString:@"\n"])

Le chèque échoue toujours pour attraper le saut de ligne. Tout le monde connaît une bonne façon de vérifier la chaîne une nouvelle ligne?

Je trouve aussi étrange que chaque élément aurait une nouvelle ligne à la fin de chaque valeur, même si je ne vois aucune preuve de cela dans la sortie du service Web.

Ceci est tout à fait le problème pour quelque chose qui devrait être exceptionnellement facile à faire.

Était-ce utile?

La solution

Je pense que c'est exactement ce dont vous avez besoin?
    text = [Texte stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];

Autres conseils

  

Quand je parse la réponse du service Web, je reçois un \ n comme le dernier caractère ...

     

Lorsque je tente de faire ce qui suit:

if (![string isEqualToString:@"\n"])
     

Le chèque échoue toujours attraper le saut de ligne.

Ce message ne retourne YES si string est un caractère long et que le caractère est \n.

Si vous voulez tester si une chaîne se termine par \n, vous devez utiliser hasSuffix::

if (![string hasSuffix:@"\n"])

Si vous voulez bande \n de la fin de la chaîne et utiliser ce qui reste, la solution de phunehehe est correcte.

Modifier Dans la réponse de Jeremy W. Sherman, il souligne le service Web peut être vous donner texte CLRF terminé. Ce point est valide, et vous ne devriez pas seulement chercher \n à la fin de la ligne, mais il faut vérifier aussi pour une séquence \r\n complète. Le code qu'il présente est une façon de le faire. Cependant, vous le faites, vous devez toujours supprimer le séparateur de ligne complète, même si elle est une séquence \r\n.

Le service web se termine probablement toutes les lignes avec CRLF, à savoir "\r\n". Vous êtes sur un système UNIX, de sorte que le caractère de saut de ligne '\n' est considéré comme le séparateur de ligne; le retour chariot '\r' est laissé dans le cadre de la ligne précédente. Lors de l'impression, il aura le même effet que '\n'. Avez-vous vérifié (en utilisant, par exemple, strvis) que le caractère de ligne finale est '\n' et non '\r'?

-[NSString hasSuffix:] ne prendre le caractère spécifique que vous fournissez newline. Pour tester si la chaîne se termine par un saut de ligne ou des espaces, voici une méthode de catégorie putative:

- (BOOL)my_hasWhitespaceOrNewlineSuffix {
  NSRange r = [self rangeOfCharacterFromSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]
                                    options:NSBackwardsSearch];
  BOOL foundChar = r.location != NSNotFound;
  BOOL isLineFinal = foundChar && (r.location + r.length == [self length]);
  return isLineFinal;
}

Vous pouvez utiliser la suggestion de phunehehe de text = [text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] pour supprimer les espaces blancs de ligne finale ou des sauts de ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top