2009-08-25 11 views

Odpowiedz

1

Wystarczy użyć własnej metody replace replace.

result = myString.replaceAll("\\n", "\n"); 

Jednak jeśli chcesz dopasować wszystkie sekwencje specjalne, możesz użyć Matchera. Zobacz http://www.regular-expressions.info/java.html dla bardzo podstawowego przykładu użycia Matchera.

Pattern p = Pattern.compile("\\(.)"); 
Matcher m = p.matcher("This is tab \\t and \\n this is on a new line"); 
StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    String s = m.group(1); 
    if (s == "n") {s = "\n"; } 
    else if (s == "t") {s = "\t"; } 
    m.appendReplacement(sb, s); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); 

Trzeba tylko uczynić zadanie bardziej wyszukanym w zależności od liczby i rodzaju ucieczek, które chcesz obsłużyć. (Ostrzeżenie to jest kod powietrze, nie jestem programista Java)

+0

Czy to nie będzie odpływ wydajności, jeśli wykonam replaceAll dla każdej możliwej postaci, to jest 8 razy? (http://java.sun.com/docs/books/tutorial/java/data/characters.html) –

+0

Przepraszam, że właśnie pokazałem anwser do twojego prostego przypadku (jest to oszustwo, że wielu z nas to robi Naprawdę odpowiedzieć na twoje pytanie). Właśnie dlatego wskazuję na klasę Matchera, która w połączeniu z StringBufferem pozwala utworzyć ciąg wyników w jednym przebiegu. – AnthonyWJones

3

Anthony wynosi 99% w prawo - ponieważ backslash jest również znakiem zarezerwowanym w wyrażeniach regularnych, musi być uciekł po raz drugi:

result = myString.replaceAll("\\\\n", "\n"); 
0

Jeśli nie chcesz, aby wyświetlić listę wszystkich możliwych uciekły znaków można przekazać to do zachowania właściwości

String escapedText="This is tab \\t and \\rthis is on a new line"; 
    Properties prop = new Properties();  
    prop.load(new StringReader("x=" + escapedText + "\n")); 
    String decoded = prop.getProperty("x"); 
    System.out.println(decoded); 

Ta obsługi wszystkich możliwych znaków

Powiązane problemy