2

假设我有字符串text\\,我需要替换\\/. 我尝试了以下表达式:

/*  str = "text\\"  */
<h:outputText value="#{fn:replace(str, '\\', '/')}" />

但我总是遇到以下异常:

Caused by: java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
^
at java.util.regex.Pattern.error(Pattern.java:1924)
at java.util.regex.Pattern.compile(Pattern.java:1671)
at java.util.regex.Pattern.<init>(Pattern.java:1337)
at java.util.regex.Pattern.compile(Pattern.java:1022)
at java.lang.String.replaceAll(String.java:2210)
at com.sun.faces.facelets.tag.jstl.fn.JstlFunction.replace(JstlFunction.java:222)

如果您能给我一个建议,我将不胜感激。

更新:根据以下答案,我发现以下表达式将起作用:

<h:outputText value="#{fn:replace(str, '\\\\', '/')}" />

最好的祝福,

4

4 回答 4

1

我相信你需要避开反斜杠。试试这个:replace("\\\\", "/")

public class BackSlashEscaper {

    public static void main(String[] args) {

        String text = "text\\\\";
        System.out.println(text);

        System.out.println(text.replace("\\\\", "/"));
    }
}

输出:

text\\
text/
于 2012-07-15T14:16:26.053 回答
1

只是用一个反斜杠来演示:

public static void main(String[] args)
    {
        String text = "text\\";

        System.out.println(text.replaceAll("\\\\","/"));
    }
于 2012-07-15T14:26:35.573 回答
1

试试这个(没有检查....)

<ui:param name="mydouble" value="\\\\"></ui:param>
<ui:param name="mysingle" value="/"></ui:param>
<h:outputText value="#{fn:replace(str, mydouble, mysingle)}" />
于 2012-07-15T14:37:52.020 回答
0
public class TempClass {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        System.out.println("before : "+str);
        String newstr = str.replace("\\", "/");
        System.out.println("after  : "+newstr);
    }
}

当我以文本形式提供输入时,我得到文本形式的输出//

before : text\\
after  : text//
于 2012-07-15T14:39:19.260 回答