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

1 つのバックスラッシュを使用して説明します。

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

        System.out.println(text.replaceAll("\\\\","/"));
    }
于 2012-07-15T14:26:35.573 に答える
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

これを試してください(チェックしていません....)

<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 に答える