代码之家  ›  专栏  ›  技术社区  ›  etheros

为什么此split()失败?

  •  5
  • etheros  · 技术社区  · 16 年前

    我正在尝试获取文件名的扩展名,但由于某些原因,我无法使拆分工作:

    System.out.println(file.getName()); //gNVkN.png
    System.out.println(file.getName().split(".").length); //0
    

    我做错什么了?

    3 回复  |  直到 16 年前
        1
  •  21
  •   Xanlantos Venky    7 年前

    split() 采用正则表达式(请参见 split(java.lang.String) )不是分隔符字符串。正则表达式 "." 表示“任何单个字符”(参见 regex ,所以它将拆分任何内容,而不会在您的列表中留下任何内容。要在文本点上拆分,请使用:

    file.getName().split("\\.")// \. escapes . in regex \\ escapes \ in Java.String
    

    一般来说,你可以使用 Pattern.quote(str) 获取匹配的正则表达式 str 字面意思。(建议) ramon )

    file.getName().split(Pattern.quote("."))
    
        2
  •  5
  •   jitter    16 年前

    也许你应该重新阅读API文档 split(java.lang.String)

    你传入的字符串是 正则表达式 .

    尝试使用

    split("\\.")
    

    你需要双反斜杠,因为 \. 是Java字符串中的无效转义。所以您需要在javastring中避免反斜杠本身。

        3
  •  4
  •   jqno    16 年前

    String.split() 在其参数和正则表达式中请求正则表达式, . 将匹配任何字符。要使其工作,需要添加 \ ,像这样:

    System.out.println(file.getName().split("\\.").length);
    

    您需要一个反斜杠来转义该点,所以regex知道您需要一个实际的点。你需要另一个反斜杠来逃避第一个反斜杠,也就是说告诉Java你想要在你的字符串中有一个实际的反斜杠。

    阅读JavaDoc String.split regular expressions 更多信息。