删除java中的所有特殊字符[重复]

Posted

技术标签:

【中文标题】删除java中的所有特殊字符[重复]【英文标题】:remove all special characters in java [duplicate] 【发布时间】:2012-12-30 22:59:03 【问题描述】:

可能重复:Replacing all non-alphanumeric characters with empty strings

import java.util.Scanner;
import java.util.regex.*;
public class io
public static void main(String args[])
Scanner scan = new Scanner(System.in);
String c;
if((c=scan.nextLine())!=null)
 
Pattern pt = Pattern.compile("[^a-zA-Z0-9]");
Matcher match= pt.matcher(c);
    while(match.find())
         c=c.replace(Character.toString(c.charAt(match.start())),"");
         
    System.out.println(c);
      
   

案例 1

Input : hjdg$h&jk8^i0ssh6
Expect : hjdghjk8i0ssh6
Output : hjdgh&jk8^issh6

案例 2

Input : hjdgh&jk8i0ssh6
Expect : hjdghjk8i0ssh6
Output : hjdghjk8i0ssh6

案例 3

Input : hjdgh&j&k8i0ssh6
Expect : hjdghjk8i0ssh6
Output : hjdghjki0ssh6

任何人请帮我弄清楚,我的代码逻辑有什么问题?

【问题讨论】:

在提交问题之前,请考虑查看 Java 命名约定并格式化您的源代码。 试试[^a-z$]|[^A-Z$]|[^0-9$] @var___ 你为什么要用记事本写代码? 仅仅因为它在记事本中并不意味着您不能使用 Tab 缩进。 :p @paranoid-android 我尽力了。 【参考方案1】:

使用[\\W+]"[^a-zA-Z0-9]" 作为正则表达式来匹配任何特殊字符,并使用 String.replaceAll(regex, String) 将 spl 字符替换为空字符串。请记住,String.replaceAll 的第一个 arg 是一个正则表达式,您必须使用反斜杠对其进行转义才能将 em 视为文字字符。

          String c= "hjdg$h&jk8^i0ssh6";
        Pattern pt = Pattern.compile("[^a-zA-Z0-9]");
        Matcher match= pt.matcher(c);
        while(match.find())
        
            String s= match.group();
        c=c.replaceAll("\\"+s, "");
        
        System.out.println(c);

【讨论】:

c=c.replace(match.group(), ""); 这个也可以。为什么?? @var___ 请注意,我使用 replaceAll 将第一个参数作为正则表达式,而您使用 replace whihc 不采用正则表达式,因此它可以工作.. :) 好的..我现在明白了..谢谢!! 同样的问题,更好的答案:***.com/a/4283366/637609 这也替换了所有的空格。因此,将其应用于句子并不是一个好主意。【参考方案2】:

您可以通过这种方式安全地阅读这些行并替换所有特殊字符。 请记住,如果您使用 \\W,您将不会替换下划线。

Scanner scan = new Scanner(System.in);

while(scan.hasNextLine())
    System.out.println(scan.nextLine().replaceAll("[^a-zA-Z0-9]", ""));

【讨论】:

如果我想使用regex 包怎么办。 好吧,如果它是为了分配而你必须使用regex 包,那么你可能正在寻找一个不必要的复杂解决方案。为什么要使用regex 包? 所以,我可以了解更多关于 regex 包的信息 那么GanGnaMStYleOverFlowErroR的答案可能是最好的?【参考方案3】:

您的问题是match.start() 返回的索引对应于匹配时字符在原始字符串中出现的位置;但是,当您每次重写字符串 c 时,这些索引就会变得不正确。

解决此问题的最佳方法是使用replaceAll,例如:

        System.out.println(c.replaceAll("[^a-zA-Z0-9]", ""));

【讨论】:

以上是关于删除java中的所有特殊字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从列标题中删除特殊字符[重复]

使用php和正则表达式从字符串中删除数字和特殊字符[重复]

删除空格和特殊字符后,ElasticSearch会查找所有重复项

从R中的字符串中删除所有特殊字符?

如何对bash中的所有字符(特殊和非特殊)进行url编码[重复]

从JS中的字符串中删除所有特殊字符