3

入力として、文字列を取得します"some text\\nsome text"-> のように表示され"some text\nsome text"ます。バックスラッシュを1つ削除して取得する方法はありますか "some text\nsome text"->として表示されます

"some text
some text"

"\t"?のような他の特殊文字でも機能します。正規表現では、次のようにすることしかできません textLine.replace("\\n", "\n") and so on.

別の方法はありますか?

4

3 に答える 3

8

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

コード:

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
于 2012-04-27T21:23:36.473 に答える
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とTab)でのみ実際に機能します。

注意: パフォーマンスを向上させたい場合は、String を StringBuilder に置き換えてください。

于 2012-04-27T13:51:49.377 に答える
0

複数行の正規表現で遊んでいますか? 次に、正規表現をコンパイルできます。

Pattern.compile("^([0-9]+).*", Pattern.MULTILINE);

http://www.javamex.com/tutorials/regular_expressions/multiline.shtml

于 2012-04-27T12:34:31.047 に答える