2012-07-15 70 views
2

假设我有字符串text\\,我需要用/替换\\。我想下面的表达式:JSF:如何替换字符串中的“\”

/* 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, '\\\\', '/')}" /> 

最好的问候,

+0

/? – 2012-07-15 14:34:17

+0

@FahimParkar:我希望它成为'text /' – 2012-07-15 17:55:34

回答

1

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

<ui:param name="mydouble" value="\\\\"></ui:param> 
<ui:param name="mysingle" value="/"></ui:param> 
<h:outputText value="#{fn:replace(str, mydouble, mysingle)}" /> 
+0

我刚刚尝试过你的解决方案,它导致了同样的例外:(。 – 2012-07-15 18:08:46

+0

你使用的是什么名字空间?'http:// java.sun.com/jsp/jstl/core' ?它是JSF 2应用程序吗? – Daniel 2012-07-15 18:14:11

+0

很奇怪,只是出于好奇,尝试最新的jsf实现来看... – Daniel 2012-07-15 18:25:46

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/ 
+0

J4mes已经这样做了,因此他有两个反斜杠:P – 2012-07-15 14:17:45

+0

他需要替换** 2 **而不是1反斜杠。 – Lopina 2012-07-15 14:19:04

+0

>假设我有字符串文本\\,我需要用/替换\\。 – Lopina 2012-07-15 14:20:44

1

只是为了一个反斜杠表明:

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

     System.out.println(text.replaceAll("\\\\","/")); 
    } 
+0

对不起,我需要一个可以在EL表达式中工作的解决方案:(。 – 2012-07-15 17:58:27

+0

谢谢你的提示。如何使它与EL表达式一起工作 – 2012-07-15 18:37:37

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// 
你想输出文本\\文本//或文本
+0

对不起,我需要一个可以在EL表达式中工作的解决方案。 – 2012-07-15 17:58:09