我写了一个查找替换的程序,用两个JTextField来获取要查找和替换的字符串。问题是,如果输入的字符串中有“\”,则用getText()得到的字符串是"\\"。比如,输入“\r\n”,得到的是“\\r\\n”。但把这些字符串用于正则表达式时,查找和替换的是反斜杠加n,而非换行符。
我的一个解决办法是在使用之前用replace("\\r","\r"),但这种方式很丑,而且不能一次性处理所有相类似的情况,不知道有没有人能够给出理想的解决方法。

解决方案 »

  1.   

    replace("\\","\");
    这个好像通用一些了吧
      

  2.   

    我对于正则不是很熟悉,只是略知一点。
    那会有什么问题呢?你说一下,我可以帮你一起想啊。这语法不熟悉,但算法也可以帮你想的啊。
    是不是刚才那样就会变成\后面一个字母。
    replace("\\","\")+后一个字母;这样再组成一个字符,可以吗?
      

  3.   

    输入"\r\n",那是输入了\ r \ n四个字符
    转义符是给编译器处理用的,不是让你自己用的
      

  4.   

    你要是想换行,就直接敲回车
    表示为String就是"\r\n",不等于你自己输入\r\n就是换行,不要弄混了
      

  5.   

    应该输入的是"\\\\r\\\\n",因为引用java的转义是"\\r\\n"正则也要用传义,就成了"\\\\r\\\\n"了!我认为是这样的不知道对不对!
      

  6.   

    replace("\\\\", "\\")
    这不就好了,把两个反斜杠换成一个
      

  7.   

    回复六楼:如果要把Windows换行符替换成Unix换行符呢?用回车的方法根本不能发挥正则的威力。
    回复七楼:不对,如果照你那样输入,getText的结果是\\\\\\\\r\\\\\\\\n
    回复八楼:getText后取得的是“\\r”,而非“\\\\r”,怎么替换?
      

  8.   

    回复八楼:getText后取得的是“\\r”,而非“\\\\r”,怎么替换?
    你试一下就知道了,\\\\代表2个斜杠
      

  9.   

    额,你就是要保留换行模式咯
    试试这个
    replaceAll("\\\\[nr]", System.getProperty("line.separator"));
    要用replaceAll,replace不行
      

  10.   

    是我自己钻牛角尖了。其实也没有几个这样的符号。主要是一些非打印符。用下面这几行代码就可以处理这个问题了。
            String[] ls={"\\r","\\n","\\t","\\b","\\f"};
            String[] rs={"\r","\n","\t","\b","\f"};        for(int i=0;i<ls.length;i++){
                res=res.replace(ls[i], rs[i]);
            }