2017-07-18 3 views
-1

Je fais des recherches sur un langage appelé Malyalam et j'essaie de créer un graphique de fréquences de mots avec les mots les plus courants. Cependant, le fichier que j'ai contient des caractères spéciaux avec l'alphabet. Je veux juste les supprimer du fichier texte. Cependant, j'ai beaucoup de problèmes avec ça. Je suis très novice en programmation et je n'arrive pas à comprendre. Quelqu'un peut-il aider?Suppression de tous les caractères ASCII du fichier texte

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader;  
import java.io.FileWriter; 
import java.io.IOException;   
import java.io.Reader; 

public class Delete { 

    public static void replaceInFile(File file) throws IOException { 

     File tempFile = File.createTempFile("buffer", ".tmp"); 
     FileWriter fw = new FileWriter(tempFile); 

     Reader fr = new FileReader(file); 
     BufferedReader br = new BufferedReader(fr); 

     while(br.ready()) { 
      fw.write(br.readLine().replaceAll("<", "")); 
     } 

     fw.close(); 
     br.close(); 
     fr.close(); 

     tempFile.renameTo(file); 
    } 
    public static void main(String[] args) throws IOException 

    { 
     File jyothis = null; 
     replaceInFile(jyothis); 
    } 
} 
+0

Bien sûr. Il suffit de poster le code que vous avez essayé jusqu'à présent, et de signaler l'endroit avec lequel vous rencontrez actuellement des problèmes. – markspace

+0

Ce n'est donc pas un fichier texte. – EJP

+0

Le problème que je suis est de pouvoir supprimer tous les caractères Ascii à la fois et comment référencer mon fichier texte – Zach

Répondre

1

Si vous voulez trouver des séquences de caractères de la MALAYALAM Script, vous pouvez utiliser la regex \p{IsMalayalam}.

Vous pouvez également choisir la recherche de caractères dans le MALAYALAM Block, en utilisant regex \p{InMalayalam}. Je ne sais pas s'il y a vraiment une différence.

Pour éliminer tous les caractères non Malayalam, vous devez conserver des espaces, afin de conserver les séquences des caractères Malayalam séparés. Si les caractères Malayalam sont séparés uniquement par des caractères non Malayalam autres que les espaces, vous voudrez probablement les remplacer par un espace.

Pour de meilleures performances, vous ne voulez pas utiliser String.replaceAll() dans une boucle, de sorte que vous feriez comme ceci:

File tempFile = File.createTempFile("buffer", ".tmp"); 
try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(tempFile))); 
    BufferedReader in = new BufferedReader(new FileReader(file))) { 

    Pattern p = Pattern.compile("\\p{IsMalayalam}+"); 
    StringBuilder buf = new StringBuilder(); 
    for (String line; (line = in.readLine()) != null;) { 
     buf.setLength(0); 
     for (Matcher m = p.matcher(line); m.find();) { 
      if (buf.length() != 0) 
       buf.append(' '); 
      buf.append(m.group()); 
     } 
     if (buf.length() != 0) 
      out.println(buf); 
    } 
} 

Pour une implémentation plus simple, vous pouvez le faire (remarquez l'utilisation de majuscule P dans la regex):

File tempFile = File.createTempFile("buffer", ".tmp"); 
try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(tempFile))); 
    BufferedReader in = new BufferedReader(new FileReader(file))) { 

    Pattern p = Pattern.compile("\\P{IsMalayalam}+"); 
    for (String line; (line = in.readLine()) != null;) 
     out.println(p.matcher(line).replaceAll(" ").trim()); 
} 
+0

comment devrais-je référencer mon fichier texte dans le programme? J'utilise le programme eclipse – Zach

+2

Juste un avertissement. Cela suppose que le fichier est correctement lu par FileReader (encodage de la plate-forme locale par défaut). –

+0

@Zach Que voulez-vous dire "référence mon fichier texte"? Ce code "référençant" vos fichiers exactement comme votre code le faisait. Ceci est un fragment de votre code. Bien sûr, vous pouvez toujours renommer ou tout ce que vous voulez, avec le fichier résultant. – Andreas