2012-07-15 67 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