2013-01-10 4 views
0

Si j'ai des données supérieures à 800 méga, les données ne sont pas des lignes de rupture. Je vais travailler avec l'exemple regex.Java :: Comment utiliser regex dans le fichier no-line-break sur 800 méga

String.replaceAll("([a-z][a-z][.?!]+) ?([A-Z][a-z]+)", "$1\r\n$2"); 

ou autres.

veuillez me guider que dois-je faire pour utiliser regex dans un cas de taille de fichier.

+2

Q: Je dois l'essayer? Certainement curieux;) – paulsm4

+0

Vous ne voulez certainement pas utiliser une regex pour cela! – fge

+2

800 méga est trop grand pour être réaliste dans la mémoire est une chaîne. Vous devriez utiliser un outil de ligne de commande qui peut traiter le fichier comme un flux, comme 'sed' – Bohemian

Répondre

0

Vous ne voulez certainement pas utiliser une regex pour une telle taille.

Si vous n'avez aucun des outils Unix classiques (sed, perl, awk) à votre disposition, jetez un oeil à CharMatcher de Guava: lisez votre fichier dans un tableau d'octets, convertissez-le en String, utilisez CharMatcher pour trouver quelque chose d'intéressant, si oui, écrivez un tableau modifié.

Et, bien sûr, n'écrivez pas en ligne mais dans un autre fichier et renommez l'original si vous avez effectué vos transformations avec succès.

Pour vos besoins de ponctuation, par exemple, vous pouvez utiliser un CharMatcher.anyOf("?!.").

0

Tant que vous avez suffisamment de RAM pour charger les données dans la mémoire, je ne vois pas pourquoi il ne peut pas être fait. Je pense que la valeur limite serait l'architecture si son système 64 bits 64 peut gérer une plus grande quantité d'adressage et c'est alors qu'il utilisera sa limite 4gb ~.

Vous devrez également définir java vm sur une valeur beaucoup plus grande que le paramètre de mémoire vm max par défaut. par exemple

java -Xmx1g myprogram 

Je ne reviendrai pas encore déconseillons fortement il. n'est pas là d'une manière que vous pourriez diviser le fichier en premier. trouver un délimiteur commun. Merci