【问题标题】:Replacing escape characters with a space用空格替换转义字符
【发布时间】:2014-04-11 14:01:20
【问题描述】:

我被要求用空格替换字符串中的转义字符。

我一直在尝试如下

String replace(String data)
    {
        String strSpecial = "";
        strSpecial = " \f\n\r\t\'\"\\";     

        char charArray[] = strSpecial.toCharArray();
        String strOutData = data;
        for (int i =0;i<charArray.length;i++)
        {  
              strOutData = strOutData.replace(charArray[i], ' ');
    }       
        return(strOutData);

    }

我收到错误 - “未终止的字符串常量”

当我使用任何字符而不是空格来替换转义字符时,它就起作用了。

请推荐

谢谢 桑迪普

【问题讨论】:

  • 注意:Java != Javascript。
  • 是的,你是对的..但是如何做到这一点..这是不可能的! ?
  • 我没有收到任何错误...您能否提供引发此错误的输入字符串?
  • 听起来这段代码在 JSP 中。我的假设是否正确?
  • 尝试使用带空格的字符串.. 类似“Akbar Sharif”

标签: java replace space


【解决方案1】:

我会使用正则表达式:

String replace(String data) {
    return data.replaceAll("[\f\n\r\t\'\"\\\\]", " ");
}

注意实现单个正则表达式反斜杠所需的 4 个反斜杠; String 文字中的每一对反斜杠在 String 中构成一个文字反斜杠,而在 String 中产生的一对反斜杠在正则表达式中构成一个文字反斜杠。

【讨论】:

    【解决方案2】:

    我在记事本中写了这个,因为我不在我的机器上,所以我不是 100% 认为它有效,但你可以尝试一下。我可以告诉你的是,如果你不想使用正则表达式,你应该使用字符串生成器来替换字符串中的字符,因为字符串在 java 中是不可变的,所以你的代码必须在每次你想要进行替换时返回一个新字符串,这可能需要一段时间,具体取决于数据中需要替换的字符数。

     public string replace(String data)
     {
         String strSpecial = "";
         strSpecial = " \f\n\r\t\'\"\\";
         StringBuilder sb = new StringBuilder();     
    
         char charArray[] = strSpecial.toCharArray();
         String strOutData = data;
    
         for (int i =0;i<data.length();i++)
         {  
             for(int j=0; j < charArray.lenght(); j++)
             {
                 if(strOutData.charAt(i) == charArray[j])
                     sb.append(' ');
                 else
                     sb.append(strOutData.charAt(i));
             }
         }       
             return(sb.toString());
    
    
     }
    

    【讨论】:

    • 赞成使用 stringbuilder 的建议。
    【解决方案3】:

    在我看来,你的方法没有问题。

    检查您的呼叫JSP 代码。如果您在 Javascript 函数中使用它,请检查解析后的 Javascript 代码是否仍然有意义。

    最简单的方法是检查生成的HTML。当你检查它时,也许你会发现你的问题。

    【讨论】:

      【解决方案4】:

      为什么你认为它不起作用?我使用以下方法进行了测试,并且成功了。

          string strSpecial = " \f\n\r\t\'\"\\";
          string strtmp2 = strSpecial.Replace('\f', ' ').Replace('\n', ' ').Replace('\r', ' ').Replace('\t', ' ').Replace('\'', ' ').Replace('\"', ' ').Replace('\\', ' ');
      

      【讨论】:

        【解决方案5】:

        您的代码将处理在 java 中保留的字符,例如:'\',如果我们使用 '\' 而没有任何首选方法,例如 "\"",它将不会显示字符串的终止。

        试试这个:

        String replace(String data)
            {
                String strSpecial = "";
                strSpecial = " \f\n\r\t\'\"\\";     
        
        
                return(strSpecial.replace("\"", " "));
        
            }
        

        【讨论】:

        • 没关系..这如何回答他的问题?
        【解决方案6】:

        我运行了您的代码并且运行良好。这是我运行的代码

        public static void main(String args[]) {
        
            String strSpecial = "";
            strSpecial = " \f\n\r\t\'\"\\";     
        
            char charArray[] = strSpecial.toCharArray();
            String strOutData = "S\t\"\'\r\f\n\n\'J";
            for (int i =0;i<charArray.length;i++)
            {  
                  strOutData = strOutData.replace(charArray[i], ' ');
        }       
            System.out.println(strOutData);
        } 
        

        您能否向我提供您正在尝试的输入? 虽然,在我看来,做这件事的正确方法是使用正则表达式

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-19
          • 1970-01-01
          • 2013-05-01
          • 1970-01-01
          • 2017-10-15
          相关资源
          最近更新 更多