如何使用java从文件中的字符串中删除特殊字符

时间:2013-08-01 09:06:39

标签: java regex special-characters

我有文本文件,它包含以下信息。我的任务是从该文本文件中删除特殊符号。我的输入文件包含

This is sample CCNA program. it contains CCNP™

我需要的输出字符串:

This is sample CCNA program. it contains CCNP.

如何做到这一点请建议我。

感谢

10 个答案:

答案 0 :(得分:8)

如果您希望在字符串中仅保留ASCII(0-255)个字符,那么

String str = "This is sample CCNA program. it contains CCNP™";
str = str.replaceAll("[^\\x00-\\x7f]+", "");

答案 1 :(得分:3)

您要删除字符串中的所有特殊字符吗?如果是这样的话:

String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");

请参阅Sean Patrick Floyd's回答可能重复的问题。

答案 2 :(得分:2)

您可以从Unicode的角度来看:

String s = "This is sample CCNA program. it contains CCNP™. And it contains digits 123456789.";
String res = s.replaceAll("[^\\p{L}\\p{M}\\p{P}\\p{Nd}\\s]+", "");
System.out.println(res);

将打印出来:

  

这是CCNA计划的样本。它包含CCNP。它包含数字123456789。

\\p{...}Unicode property

\\p{L}匹配所有语言的所有字母

\\p{M}一个字符,旨在与另一个字符组合(例如重音符号,变音符号,封闭框等)。

\\p{P}任何标点字符。

\\p{Nd}除了表意文字脚本之外的任何脚本中的数字0到9。

因此,这个正则表达式将替换不是字母(也是组合字母),标点符号,数字或空间字符(\\s)的每个字符。

答案 3 :(得分:1)

 ^[\\u0000-\\u007F]*$

这样你只允许ASCII字符,但你需要告诉我们什么是特殊字符。

答案 4 :(得分:0)

       String  yourString = "This is sample CCNA program. it contains CCNP™";
       String result = yourString.replaceAll("[\\™]","");       
       System.out.println(yourString);
       System.out.println(result);

答案 5 :(得分:0)

你也可以尝试类似:

Normalizer.decompose(str, false, 0).replaceAll("\\p{InSuperscriptsAndSubscripts}+", "");

但您需要找到合适的Unicode组或组(Unicode Blocks)。

答案 6 :(得分:0)

您必须真正定义实例中的特殊字符。

如果您不是RegEx的粉丝,可以考虑使用Character类之外的一些方法。见下面的示例:

public class Test {

    public static void main(String[] args) {

        String test = "This is sample CCNA program. it contains CCNP™";

        System.out.println("Character\tAlpha or Letter\tWhitespace");

        for (char c : test.toCharArray()) {
            System.out.println(
                    c + "\t\t"
                    + Character.isLetterOrDigit(c) + "\t\t" 
                    + Character.isWhitespace(c));
        }
    }
}

除了上述方法之外,您还可以使用其他方法。查看Character类API。

答案 7 :(得分:0)

正则表达式排除字符的替代选项> 128。

    String s = "This is sample CCNA program. it contains CCNP™";


    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) > 128) {
            s = s.substring(0,  i) 
                    + s.substring(i + 1);
            i++;
        }
    }

答案 8 :(得分:0)

import java.util.Scanner;

public class replacespecialchar {

    /**
     * @param args
     */
    public static void main(String[] args) {

        String before="";

        String after="";
        Scanner in =new Scanner(System.in);
        System.out.println("enter string with special char");
        before=in.nextLine();

         for (int i=0;i<before.length();i++)
          {
              if (before.charAt(i)>=65&&before.charAt(i)<=90 || before.charAt(i)>=97&&before.charAt(i)<=122)  
              {
                    after+=before.charAt(i);
              }
          }

        System.out.println("String with special char "+before);
        System.out.println("String without special char "+after);
    }
}

答案 9 :(得分:0)

上面关于删除字符的答案&gt; 128非常有帮助。谢谢。

但是,它没有涵盖某些情况,例如连续的2个坏字符或字符串末尾的坏字符。以下是我的修改,删除除标签和换行之外的所有特殊字符。

  // Remove all special characters except tab and linefeed
  public static String cleanTextBoxData(String value) {
    if (value != null) {
    int beforeLen = value.length();
       for (int i = 0; i < value.length(); i++) {
         if ( ((value.charAt(i)<32) || (value.charAt(i)>126)) &&
            ((value.charAt(i)!=9) && (value.charAt(i)!=10)) ) {
           if ((value.charAt(i)<32) || (value.charAt(i)>126)) {
             if (i==value.length()-1) {
               value = value.substring(0,i);
             } else {
            value = value.substring(0,i) + value.substring(i+1);
            i--;
             }
        }
           if (i == value.length()) {
             break;
           }
         }
       }
       int dif = beforeLen - value.length();
       if (dif > 0) {
         logger.warn("Found and removed {} bad characters from text box.", dif);
       }

    }
      return value;
  }