从字符串中删除特殊字符

时间:2014-03-22 12:16:55

标签: java regex

嗨大家好我尝试从字符串中删除特殊的字符和数字,每一件事都运行正常但是字符'h'已经打印在前缀和后缀中我不知道它为什么打印指导我做了什么错误。 ..

  String str = "<h1>Hi buddy!!you @ $ did a Great job . <h1>";
  String str1 = str.replaceAll("[^\\p{L}\\p{M}]", " ");
  System.out.println(str1);

我期待的输出

Hi buddy  you did a Great job

但我得到了

h Hi buddy  you did a Great job h

5 个答案:

答案 0 :(得分:4)

正如评论中所提到的,在删除除字母和标记之外的所有内容之前,您应该使用HTML解析器删除标记。

如果您坚持使用正则表达式删除标记,您可以改为:

String str1 = str.replaceall("<[^>]*>", "").replaceAll("[^\\p{L}\\p{M}]", " ");

即。在...之前删除标签。

答案 1 :(得分:2)

这两个h来自您输入源中的<h1>标记:

<h1>Hi buddy!!you @ $ did a Great job . <h1>
 ^                                       ^
 |                                       |
 + ------------- Here and here ----------+

如果您不想看到它们,请在调用replaceAll之前找到标签,然后将其删除。一种快速的方法是在"<\\p{Alnum}+>"的单独调用中应用replaceAll正则表达式。学习实验是可以的,但对于生产来说太脏了。如果您需要可靠地执行此操作,请获取HTML解析器以删除标记。

答案 2 :(得分:0)

使用此代码。它会工作..

     String str = "<h1>Hi buddy!!you @ $ did a Great job . <h1>";       
     String str1 = str.replaceAll("<[^>]+>", "");
     String str2 = str1.replaceAll("[^\\p{L}\\p{M}]", " ");
     System.out.println(str2);

答案 3 :(得分:0)

如果有多个连续空格找到一个空格,删除标签并删除所有特殊字符,这将删除。

 String str = "<h1>Hi buddy!!you @ $ did a Great job . <h1>";
    //  String str1 = str.replaceAll("[^\\p{L}\\p{M}]", " ");

      String str1 =  str.replaceAll("<[^>]+>", "").replaceAll("[^\\p{L}\\p{M}]", "      
      ").replaceAll("\\s+", " ");

      System.out.println(str1);

输出:

 Hi buddy you did a Great job 

答案 4 :(得分:0)

试试这个程序它会起作用

public class StringFunction{
public static void main(String args[])
{
    String str = "<h1>Hi buddy!!you @ $ did a Great job . <h1>";
    System.out.println(str.replaceAll("<[^>]+>", "").replaceAll("[^\\p{L}\\p{M}]", " "));

}
}