2012-04-27 4 views
3

入力として、"some text\\nsome text" - >"some text\nsome text"と表示されます。 "\t"のような他の特殊文字のためにも動作しますエスケープされたエスケープシーケンスをエスケープされていない値に置き換えます。

"some text 
some text" 

として示さ> - それは1つのバックスラッシュを削除し、 "some text\nsome text"を得ることが可能である方法 ? 正規表現を使用すると、同じようにしかできません textLine.replace("\\n", "\n") and so on.

別の方法がありますか?

+0

's.replaceAll( "\\\\\\\\"、 "\\\\")。 –

+0

@MarkoTopolnikはOPが求めていることをしません。 – Romain

+1

@Lex「1つのバックスラッシュを削除したくない」場合は、「エスケープされたエスケープシーケンスをそのエスケープされていない値に置き換える」とします。 – Romain

答えて

0

だから、それはあなたが2つの文字から1つの文字を作成したい、それほど明白ではありません。

私はこの方法を作った。

String res=""; 
    boolean backslash=false; 
    for(char c : "some text\\nsome text".toCharArray()){ 
     if(c!='\\'){ 
      if(backslash){ 
       switch(c){ 
        case 'n' : 
         res+='\n'; 
         break; 
        case 't' : 
         res+='\t'; 
         break; 

       } 
       backslash=false; 
      }else{ 
       res+=c; 
      } 
     } 
     else{ 
      backslash=true; 
     } 
    } 

たぶん、それが実際には、私はスイッチを入れた場合(EOLとタブ)のために働く、お手伝いを致します。

NB:パフォーマンスを向上させる場合は、StringBuilderで置き換えてください。

8

あなたは車輪を再構築する必要はありません。アンエスケープJava文字列にはorg.apache.commons.lang3.StringEscapeUtilsを使用できます。 Stringで見つかったJavaリテラルをエスケープ解除します。たとえば、 '\'と 'n'のシーケンスは、 '\'の前に別の '\'がない限り、改行文字に変換されます。その場合、もう一度エスケープ解除する必要があります。

コード

import static org.apache.commons.lang3.StringEscapeUtils.unescapeJava; 

public class Unescape { 
    public static void main(String[] args) { 
     System.out.println("some text\\nsome text"); 
     System.out.println(unescapeJava("some text\\nsome text")); 
    } 
} 

出力

some text\nsome text 
some text 
some text 
+0

魅力のように動作します。ありがとう! –

-1

使用Apacheのユーティリティ:

StringEscapeUtils.unescapeJava(stringToUnEscape)。

文献:https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html

+0

複数の質問に同じ回答を投稿しないでください。 1つの良い答えを投稿し、投票/フラグを立てて他の質問を重複として閉じます。質問が重複でない場合は、*あなたの質問に対する回答を調整してください。* –

関連する問題