【问题标题】:Is it possible to use split function with a '.' as a delimiting regular expression? [duplicate]是否可以使用带有“。”的拆分功能?作为定界正则表达式? [复制]
【发布时间】:2015-04-03 09:52:46
【问题描述】:

我想拆分一个字符串变量的内容,但我想用这个点作为分隔正则表达式,我的代码不起作用。

public class Test {

    public static void main(String [] a){
        String ch = "r.a.c.h.i.d";
        String[] tab;
        tab=ch.split(".");
        System.out.println(tab.length);
        for(String e : tab)System.out.println(e);
    }
}

【问题讨论】:

    标签: java


    【解决方案1】:
    tab = ch.split("\\.");
    

    一个斜杠是正则表达式的转义字符。但在 Java 中,您需要有第二个斜线,因为您必须转义第一个斜线。

    【讨论】:

      【解决方案2】:

      是的,这是可能的。在正则表达式中,. means any character

      预定义的字符类

      。任何字符(可能匹配也可能不匹配行终止符)

      所以你必须转义它以提供文字 . 的含义。用反斜线字符转义它,提供两个反斜线,因为 Java 需要反斜线字符本身转义。

      使用正则表达式"\\."

      通常,要从可能包含特殊含义字符的表达式中提取文字字符,您可以使用Pattern.quote method

      此方法生成一个字符串,可用于创建一个模式,该模式将匹配字符串 s,就好像它是文字模式一样。

      split(Pattern.quote("."))
      

      【讨论】:

      • 是的,非常感谢朋友
      【解决方案3】:

      tab=ch.split("."); 更改为tab=ch.split("\\.");。您需要转义点,否则它会被视为传递给 split 的正则表达式中的特殊字符。

      【讨论】:

      • 遗憾的是,Java 不允许我们像 C# 那样使用 @ 来表示字符串文字
      • @user3189142 这确实是一种耻辱!不是我唯一希望 Java 已经在 C# 中拥有的东西。
      猜你喜欢
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2020-08-25
      • 2021-10-21
      相关资源
      最近更新 更多