【问题标题】:Splitting String using split method使用 split 方法拆分字符串
【发布时间】:2012-11-07 11:52:58
【问题描述】:

我想像这样拆分一个字符串:

  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:

【问题讨论】:

  • 但我想将原始字符串拆分为 5 个部分:C:程序文件 imagesflower.jpg
  • @Joseph82 无论 Esailija 说什么都对你有用

标签: java android string parsing split


【解决方案1】:

试试

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

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

在 java(regex world) 中,\ 是一个元字符。如果要将元字符视为普通字符,则应附加一个额外的 \ 或用 \Q\E 将其括起来。

下面是一些元字符

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

要将上面列出的任何字符视为普通字符,您必须使用 '\' 将它们转义或将它们括在 \Q\E 周围

喜欢:

        \\\\ or \\Q\\\\E

【讨论】:

  • @Joseph82,它起作用的原因是因为正则表达式模式以 \ 符号开始和结束,并且您需要转义特殊字符 \ 所以您以 \ 符号开始和结束模式,并且那么模式本身就是特殊字符(带有转义)\\.总之就是 \\\\
【解决方案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);
}

【讨论】:

    【解决方案3】:

    对字符串有 2 个级别的解释,首先语言解析器将其设为"\",这就是正则表达式引擎看到的内容,并且它是无效的,因为它是一个没有要转义的字符的转义序列。

    所以你需要使用s.split("\\\\"),这样正则表达式引擎才能看到\\,这又意味着一个文字\

    如果您在字符串文字中定义该字符串,则还必须在此处转义反斜杠:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        试试这个:

        String s = "C:/Program/files/images/flower.jpg";
        String[] tokens = s.split("/");
        enter code hereString image= tokens[4];
        

        【讨论】:

          【解决方案6】:

          您的原始输入文本应该是

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

          而不是

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

          【讨论】:

          • 我从 Web 服务获取字符串。所以我以这种方式在字符串中插入路径(使用Ksoap2): s = response.getProperty("image").toString();
          【解决方案7】:

          这行得通,

              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]);      
              }
          

          【讨论】: