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(regex world)\中是一个元字符。如果要将元字符视为普通字符,则应附加一个额外的 \ 或用 \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

There is 2 levels of interpreting the string, first the language parser makes it "\", and that's what the regex engine sees and it's invalid because it's an escape sequence without the character to escape.

So you need to use s.split("\\\\"), so that the regex engine sees \\, which in turn means a literal \.

If you are defining that string in a string literal, you must escape the backslashes there as well:

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

字符串[] 标记=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 回答