2017-07-27 51 views
0

我想过滤文本,只留下字母(a-z和A-Z)。这似乎是很容易,以下是这样的How to filter a Java String to get only alphabet characters?在Java中使用正则表达式的奇怪行为

String cleanedText = text.toString().toLowerCase().replaceAll("[^a-zA-Z]", "");   
System.out.println(cleanedText); 

的问题,它的输出是空的,除非我改变了正则表达式,增加一个字符,例如我已经尝试检查它是否与普通的正则表达式一起工作(不使用由Java中的String对象给出的方法ReplaceAll),但我有完全相同的问题。

任何想法可能是这种奇怪行为的来源?

我有一个txt文件,我使用BufferedReader读取。我将每行添加到一个长字符串,并将之前发布的代码应用于此。整个代码如下:

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.lang.StringBuffer; 
import java.util.regex.*; 

public class Loader { 

    public static void main(String[] args) { 

     BufferedReader file = null; 
     StringBuffer text = new StringBuffer(); 
     String str; 

     try { 
      file = new BufferedReader(new FileReader("text.txt")); 
     } catch (FileNotFoundException ex) { 
     } 
     try 

     { 
      while ((str = file.readLine()) != null) { 
       text.append(str); 

      } 

      String cleanedText = text.toString().toLowerCase().replaceAll("[^:a-z]", "");  
      System.out.println(cleanedText); 
     } catch (IOException ex) { 
     } 
    } 
} 

的文本文件是一个正常物品,我想删除所有内容(包括空格),这不是一个字母。摘录如下:“[16]自由软件基金会(FSF)始于1985年,意指”免费“一词意指自由发布”

+0

你可能想'[^ A-ZA-Z描述]'(用空格) –

+3

请添加一些例子,顺便说一句:当你之前调用toLowerCase时,你不需要AZ ;-) – Betlista

+0

适用于我,我猜这是输入错误。 – Antoniossss

回答

1

“,正如我在评论中写的那样,更具体地指明了什么是错的。 ..

我试过

public class Regexp45348303 { 

    public static void main(String[] args) { 
     String[] tests = { "abc01", "01DEF34", "abc 01 def.", "a0101\n0202\n0303x" }; 
     for (String text : tests) { 
      String cleanedText = text.toLowerCase().replaceAll("[^a-z]", ""); // A-Z removed too  
      System.out.println(text + " -> " + cleanedText); 
     } 
    } 
} 

,输出是:

abc01 -> abc 
01DEF34 -> def 
abc 01 def. -> abcdef 
a0101 
0202 
0303x -> ax 

根据我的理解是正确的......

+0

挖我想多一些,并得出结论:那就是必须是文本的长度,因为如果我分开它,它完美的作品,但如果我试图在一次去做它会抛出一个空的结果。 – Felix