4

次のように文字列を分割したい:

  C:\Program\files\images\flower.jpg     

ただし、次のコードを使用します。

  String[] tokens = s.split("\\");
  String image= tokens[4];

このエラーが発生します:

 11-07 12:47:35.960: E/AndroidRuntime(6921): java.util.regex.PatternSyntaxException: Syntax error U_REGEX_BAD_ESCAPE_SEQUENCE near index 1:
4

7 に答える 7

5

試す

String s="C:\\Program\\files\\images\\flower.jpg"

String[] tokens = s.split("\\\\");

java(正規表現の世界)\ではメタ文字です。メタ文字を通常の文字として扱いたい場合は、余分な\を追加するか、\ Q\Eで囲む必要があります。

以下はメタ文字の一部です

<([{\^-=$!|]})?*+.>

上記の文字を通常の文字として扱うには、「\」でエスケープするか、\ Q\Eで囲む必要があります。

お気に入り:

        \\\\ or \\Q\\\\E
于 2012-11-07T11:55:56.923 に答える
2

\\\\元の文字列には。が必要なので、で分割する必要があります\\。次のテストケースで自分で試してみてください。

    @Test
public void split(){
      String s = "C:\\Program\\files\\images\\flower.jpg";     


        String[] tokens = s.split("\\\\");
        String image= tokens[4];
        assertEquals("flower.jpg",image);
}
于 2012-11-07T11:57:10.627 に答える
1

文字列の解釈には2つのレベルがあり、最初に言語パーサーがそれを作成します。これ"\"は正規表現エンジンが認識するものであり、エスケープする文字のないエスケープシーケンスであるため無効です。

したがって、を使用する必要がありますs.split("\\\\")。これにより、正規表現エンジンはを認識します。\\これは、リテラルを意味し\ます。

文字列リテラルでその文字列を定義している場合は、そこでも円記号をエスケープする必要があります。

String s = "C:\\Program\\files\\images\\flower.jpg";     
于 2012-11-07T11:57:39.900 に答える
1

String [] tokens = s.split( "\\\\");

于 2012-11-07T12:01:33.290 に答える
1

これを試して:

String s = "C:/Program/files/images/flower.jpg";
String[] tokens = s.split("/");
enter code hereString image= tokens[4];
于 2012-11-07T12:03:29.617 に答える
0

元の入力テキストは次のようになります

 C:\\Program\\files\\images\\flower.jpg  

それ以外の

 C:\Program\files\images\flower.jpg  
于 2012-11-07T11:55:49.600 に答える
0

これは動作します、

    public static void main(String[] args) {
        String str = "C:\\Program\\files\\images\\flower.jpg";
        str = str.replace("\\".toCharArray()[0], "/".toCharArray()[0]);
        System.out.println(str);
        String[] tokens  = str.split("/");
        System.out.println(tokens[4]);      
    }
于 2012-11-07T12:03:38.647 に答える