2011-10-30 4 views
0

Comment rechercher une chaîne unicode dans un fichier en utilisant java? Ci-dessous le code que j'ai essayé.Il fonctionne des chaînes autres que Unicode.rechercher une chaîne unicode dans un fichier en utilisant java

import java.util.regex.Matcher; 
    import java.util.regex.Pattern; 
    import java.io.*; 
    import java.util.*; 
    class file1 
    { 
    public static void main(String arg[])throws Exception 
    { 
    BufferedReader bfr1 = new BufferedReader(new InputStreamReader(
      System.in)); 
    System.out.println("Enter File name:"); 
    String str = bfr1.readLine(); 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    String s; 
    int count=0; 
    int flag=0; 

    System.out.println("Enter the string to be found"); 
    s=br.readLine(); 
    BufferedReader bfr = new BufferedReader(new FileReader(str)); 
    String bfr2=bfr.readLine(); 
    Pattern p = Pattern.compile(s); 
      Matcher matcher = p.matcher(bfr2); 
      while (matcher.find()) { 
      count++; 
      }System.out.println(count); 
    }} 

Répondre

3

Eh bien, il y a trois sources potentielles de problèmes que je peux voir:

  • L'expression régulière peut être incorrect. Avez-vous vraiment besoin pour utiliser une expression régulière? Essayez-vous de faire correspondre un modèle, ou juste une chaîne simple?
  • Vous ne parvenez peut-être pas à obtenir une entrée non ASCII à partir de la ligne de commande. Vous devriez vider la chaîne d'entrée en termes de caractères Unicode (voir le code plus tard).
  • Vous risquez de lire le fichier avec un encodage incorrect. Actuellement, vous utilisez FileReader qui utilise toujours l'encodage par défaut de la plateforme. Quel est le codage du fichier que vous essayez de lire? Je recommande d'utiliser FileInputStream enveloppé dans un InputStreamReader en utilisant un codage explicite (par exemple UTF-8) qui correspond au fichier.

Pour déboguer les réelles valeurs dans les chaînes, je généralement utiliser quelque chose comme ceci:

private static void dumpString(String text) { 
    for (int i = 0; i < text.length(); i++) { 
     char c = text.charAt(i); 
     System.out.printf("%d: %4h (%c)", i, c, c); 
     System.out.println(); 
    } 
} 

De cette façon, vous pouvez voir le point exact de code UTF-16 dans chaque char dans la chaîne.

Questions connexes