【问题标题】:Using string.split() with a decimal - not working使用带小数的 string.split() - 不起作用
【发布时间】:2012-11-19 19:19:42
【问题描述】:

我正在尝试将一行文本拆分为多个部分。文本的每个元素都由句点分隔。 我正在使用 string.split(".");将文本拆分为字符串数组,但没有得到任何地方。

以下是代码示例:

String fileName = "testing.one.two";

String[] fileNameSplit = fileName.split(".");

System.out.println(fileNameSplit[0]);

有趣的是,当我尝试“:”而不是“。”时,它有效吗?我怎样才能让它工作一段时间?

【问题讨论】:

标签: java regex string


【解决方案1】:

String.split() 接受regular expression(简称正则表达式),点是正则表达式中的特殊字符。这意味着“匹配除换行符之外的所有字符”。因此,您必须使用前导反斜杠对其进行转义。但是前导反斜杠是 java 字符串文字中的特殊字符。它表示一个转义序列。所以它也必须用另一个反斜杠转义。像这样:

fileName.split("\\.");

【讨论】:

  • 什么是正则表达式的例子?
  • @Imray 常规示例是匹配字符串的模式。您可以在所有编程语言中找到它们。只是谷歌的教程。
【解决方案2】:

试试这个:fileName.split("\\.");

【讨论】:

  • 还是不行。当我希望它是 testing 时,输出是 testing.one.two
  • @Imray 这称为转义序列。 '\\.' => 这是一个匹配文字 '.' 的正则表达式。 Java中的字符。你逃脱'。用一个斜线并用第二个斜线避开该斜线。
【解决方案3】:
fileName.split(".");

应该是

fileName.split("\\.");

. 是特殊字符,split() 接受正则表达式。因此,您需要对特殊字符进行转义。

以反斜杠(\) 开头的字符是转义序列,具有 对编译器的特殊意义。请阅读此documentation

【讨论】:

    【解决方案4】:

    这是因为split 的参数是一个正则表达式,而. 基本上表示任何字符。使用"\\." 而不是"." 应该可以正常工作。

    文字句点(与任何字符 . 相对)的正则表达式是 \.(使用 \ 转义字符强制进行文字解释)。

    而且,因为它位于\ 已经具有特殊含义的字符串中,您还需要转义that

    【讨论】:

      【解决方案5】:

      您需要转义“。”字符,因为 split 接受正则表达式和 .表示任何字符,因此要对 split 方法说按点拆分,您必须像这样对其进行转义:

      String[] array = string.split('\\.');
      

      【讨论】:

        【解决方案6】:

        split() 接收参数 regex

        尝试使用

        String[] fileNameSplit = fileName.split("\\.");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多