比如一段英文:'Sorry, I can't go out today!'
这么切割成一个一个的单词Sorry I can't go out today.
我显示根据空格split,然后用replaceAll("\\p{P}", "");去掉所有标点符号,
但是can't也变成cant了,有什么更好的方法吗?

解决方案 »

  1.   

    \\p{P} 代表什么字符? 这样试试
    replaceAll("[\\p{P}&&[^']]", "");
      

  2.   

    \\p{P}这个是代表所有的标点符号。你这个意思是对于“'”这个标点不过滤是吗?但是'Sorry, I can't go out today!'这句话中前后两个单引号都要过滤掉,只对组合词中的单引号不过滤
      

  3.   

    str = str.replaceAll("(?<![a-zA-Z])'", "")     //先将前面没有字母的 ' 符号删掉
       .replaceAll("[\\p{Punct}&&[^']]", "");
      

  4.   


    String s="'Sorry, I can't go out today!'";
    //先把开头和结尾的'以及'前面不是字母的以及除了'外的其它标点符号先替换掉,再用空白字符进行分割
    String[] sArray=s.replaceAll("^'+|'+$|(?<![A-Za-z])'+|[\\p{Punct}&&[^']]+","").split("\\s+");
    System.out.println(sArray.length);
    for(String str:sArray)
       System.out.println(str);
      

  5.   

    用substring这个属性返回一个新字符串试试
      

  6.   

    你用substring吧,我刚才试了一下,不会把can't变成cant
      

  7.   

    API查的源码 完美解决Pattern p = Pattern.compile("'|,");
     Matcher m = p.matcher("'Sorry, I can't go out today!'");
     StringBuffer sb = new StringBuffer();
     while (m.find()) {
         m.appendReplacement(sb, "");
     }
     m.appendTail(sb);
     System.out.println(sb.toString());