Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java从文件中的字符串中删除特殊字符_Java_Regex_Special Characters - Fatal编程技术网

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

如何使用java从文件中的字符串中删除特殊字符,java,regex,special-characters,Java,Regex,Special Characters,我有一个文本文件,它包含以下信息。我的任务是从该文本文件中删除特殊符号。我的输入文件包含 这是一个样本CCNA程序。它包含CCNP™ 我所需的输出字符串: This is sample CCNA program. it contains CCNP. 如何做到这一点,请建议我 谢谢是否要从字符串中删除所有特殊字符?如果是: String alphaOnly = input.replaceAll("[^a-zA-Z]+",""); String alphaAndDigits = input.rep

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

这是一个样本CCNA程序。它包含CCNP™

我所需的输出字符串:

This is sample CCNA program. it contains CCNP.
如何做到这一点,请建议我


谢谢

是否要从字符串中删除所有特殊字符?如果是:

String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
请参阅可能重复问题的答案

 ^[\\u0000-\\u007F]*$
这样,您只允许使用ASCCI字符,但您需要告诉我们什么是特殊字符。

这应该可以,“如果您希望在字符串中只保留ASCII(0-127)字符”:


您也可以尝试以下操作:

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

但您需要找到一个或多个合适的Unicode组()。

您可以从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{…}
是一个

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

\\p{M}
要与另一个字符组合的字符(例如重音符号、元音、包围盒等)

\\p{p}
任何类型的标点符号

\\p{Nd}
除表意文字外的任何文字中的零到九的数字


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

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

如果你不是正则表达式的爱好者,你可以考虑从代码<字符> /Cux>类中使用一些方法。见下面的示例:

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));
        }
    }
}

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

正则表达式的替代选项以排除字符>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++;
        }
    }
String s=“这是样本CCNA程序。它包含CCNP™";
对于(int i=0;i128){
s=s.子串(0,i)
+s.子串(i+1);
i++;
}
}
导入java.util.Scanner;
公共类替换特殊字符{
/**
*@param args
*/
公共静态void main(字符串[]args){
字符串在“”之前;
在“”后面加上字符串;
扫描仪输入=新扫描仪(系统输入);
System.out.println(“使用特殊字符输入字符串”);
before=in.nextLine();

对于(int i=0;i=65&&before.charAt(i)=97&&before.charAt(i)来说,上面关于删除字符>128的回答非常有用。谢谢

但是,它没有涵盖某些情况,例如一行中有两个坏字符或字符串末尾有一个坏字符

  // 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;
  }
//删除除制表符和换行符以外的所有特殊字符
公共静态字符串cleanTextBoxData(字符串值){
if(值!=null){
int beforeLen=value.length();
对于(int i=0;i0){
warn(“从文本框中找到并删除了{}个错误字符。”,dif);
}
}
返回值;
}

什么构成特殊字符?字符串是否也可以包含其他unicode字母?这是错误的。ASCII是代码点0-127,因为128-255不是ASCII。
    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++;
        }
    }
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);
    }
}
  // 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;
  }