4

\\ 文字列を次のように置き換えようとしています\\\\

以下はプログラムですが、終了しています

String path="\\dctmadmin\\Human Resource\\Training\\Procedures\\Formalities\\Legalities\\Material";         

long start = System.currentTimeMillis();
// replace this string \\ with \\\\
String formatedPath = path.replaceAll("\\\\", "\\\\\\\\");
System.out.println(" string after formatting using replaceAll = "+formatedPath);
long end = System.currentTimeMillis();
System.out.println(" time take in milli seconds for String.replaceAll = "+Long.toString(end-start) );

私がやっていた間違いを教えてください。

4

6 に答える 6

3

正規表現の力を必要としないリテラル文字列の置換の場合は、より単純で効率的であるためreplaceではなく、使用する必要があります。replaceAll

// replace single backslash with double
String formatedPath = path.replace("\\", "\\\\");
于 2012-11-02T08:57:40.043 に答える
1

実際の文字列には \ が 1 つしか含まれていません。テスト

System.out.println("\\dctmadmin\\Human Resource\\Training\\Procedures\\Formalities\\Legalities\\Material");

System.out.println("your string".replaceAll(...));

于 2012-11-02T08:57:24.443 に答える
1

としてみてください

String path = 
    "\\dctmadmin\\Human Resource\\Training\\Procedures\\Formalities\\Legalities\\Material";


long start = System.currentTimeMillis();
// replace this string \\ with \\\\

String formatedPath = path.replaceAll("\\\\", "\\\\\\\\\\\\\\\\");

System.out.println(" string after formatting using replaceAll = " + 
                   formatedPath);


long end = System.currentTimeMillis();

System.out.println(" time take in milli seconds for String.replaceAll = " + Long.toString(end - start));

System.out.println(" path  "+formatedPath);
于 2012-11-02T08:58:07.140 に答える
0

あなたは正しかった。Java 文字列\\では 1 つのバックスラッシュを表し、正規表現では非文字列エスケープです。

    String formatedPath = path.replaceAll("\\\\", "\\\\\\\\");
    System.out.println("path         = " + path);
    System.out.println("formatedPath = " + formatedPath);

与える

path         = \dctmadmin\Human Resource\Training\Pr...s\Form...s\L...s\Material
formatedPath = \\dctmadmin\\Human Resource\\Training\\Pr..s\\Form...s\\Material
于 2012-11-02T09:08:37.010 に答える
0

の出力

string after formatting using replaceAll = \\dctmadmin\\Human Resource\\Training\\Procedures\\Formalities\\Legalities\\Material

正しい。元の「\」がエスケープされているという事実を割り引いているため、変更されていないようです:)

于 2012-11-02T09:09:20.757 に答える
0

文字列で \ と言うと、実際には \ が別の \ でエスケープされていることを意味するため、正しく置き換えられます。

String path="\\dctmadmin\\Human Resource\\Training\\Procedures\\Formalities\\Legalities\\Material";

         System.out.println("String before: "+ path);
        long start = System.currentTimeMillis();
        // replace this string \\ with \\\\

          String formatedPath = path.replaceAll("\\\\", "\\\\\\\\");

          System.out.println(" string after formatting using replaceAll = "+formatedPath);

私が得た出力

   String before:  \dctmadmin\Human Resource\Training\Procedures\Formalities\Legalities\Material

     string after formatting using replaceAll = \\dctmadmin\\Human Resource\\Training\\Procedures\\Formalities\\Legalities\\Material
     time take in milli seconds for String.replaceAll = 2
于 2012-11-02T08:54:46.380 に答える