如何在Java字符串数组中编写“?”,“(”

时间:2019-10-11 17:36:07

标签: java arrays string replace

我需要一个像这样的数组:

String [] x = {",",".",":",";","&","?","!","(",")"};

但是对于这些字符,它不能正常工作:“。”,“?” ,“(”,“)”。 当我尝试将它们替换为字符串时:

String z = "Hell&o Wor.ld!";

for(int i=0; i<x.length; i++){

if(z.contains(x[i])){

    System.out.println(z.replaceAll(x[i],""));
 }}

不适用于这四个字符。我该如何解决?

2 个答案:

答案 0 :(得分:2)

replaceAll使用这些字符的正则表达式解释,因此您需要对其进行转义。为了字符串解析器,您还需要转义反斜杠:

String [] x = {",", "\\.", ":", ";", "&", "\\?", "!", "\\(", "\\)"};

由于这里也有转义字符,因此您需要更改包含检查以仅检查匹配字符串中的最后一个字符:

String z = "Hell&o Wor.ld!";

for(int i=0; i<x.length; i++) {
    if( z.contains( x[i].substring(x[i].length() - 1) )) { // if z contains last char of x
        System.out.println(z.replaceAll(x[i],""));
    }
}

答案 1 :(得分:1)

原因:String.replaceAll 以正则表达式为第一个参数, 在Java regex语法.?()中是特殊字符


  1. 转义它们:

    String[] x = {",", "\\.", ":", ";", "&", "\\?", "!", "\\(", "\\)"};
    

    但是条件不再起作用,您需要类似

    if (z.matches(".*" + x[i] + ".*")) {
    
  2. 使用String.replace

    System.out.println(z.replace(x[i], ""));
    

-