字符串由点分割 - Java

时间:2015-02-26 09:50:23

标签: java string

我有以下代码:

public static void main(String[] args) {

    String str = "21.12.2015";
    String delim = "\\.";
    String[] st = str.split(delim);
    System.out.println(st[0]+"."+st[1]+"."+st[2]);        // 1
    System.out.println(st[0]+delim+st[1]+delim+st[2]);    // 2
}

现在,第1行正在打印预期产量 - 2015年12月21日。但为什么第2行没有提供与第1行相同的输出?为什么打印像21 \ .12 \ .2015?

修改

实际上在我的要求中,分隔符会为每个字符串( - 或/或。)动态更改。所以我试图将分隔符分配给变量,然后按它分割,最后将其打印为模式(比如dd.mm.yy或dd-mm-yy等)。对于其他分隔符来说它很好,但是对于它来说它就像dd \ .mm \ .yy。我该如何达到预期的效果?

7 个答案:

答案 0 :(得分:1)

当您说拆分时,您使用delim作为正则表达式模式。它被区别对待。请查看此regular expression

但是当你在sysout中使用delim时,你将它用作字符串。差异是显而易见的

答案 1 :(得分:1)

这会处理所有delim值:

String str = "21.12.2015";
String delim = ".";   // or "-" or "?" or ...
String[] st = str.split(java.util.regex.Pattern.quote(delim));

答案 2 :(得分:0)

创建delim变量时,可以转义反斜杠。 delim变量的实际值为\.。 只需创建delim变量(反斜杠无用):

String delim = ".";

答案 3 :(得分:0)

因为delim = "\\.",需要拆分"\\."

答案 4 :(得分:0)

分割方法使用正则表达式进行拆分,因此您需要提供\\.,而这不是打印时的情况,您只需要使用“。”直。

在Java中\\.将打印为\.,因为\\被视为单个反斜杠。

答案 5 :(得分:0)

您正在使用String类中的split方法,该方法使用正则表达式来拆分字符串。

由于这个\\。将每个点拆分字符串并需要进行转义,因为点本身是正则表达式的一部分。

在第二部分中,您只是打印字符串,其中反向间隙本身是字符串表达式的指示符(例如\ n作为新行)。

双重反弹只是排除了这个字符串表达式被写成普通字符串" \ n"在这种情况下,这就是为什么你得到" \。"结果

为了更好地理解,尝试删除delim变量中的一个反斜杠,并且java解释器将抛出一个错误,因为" \。"不是字符串表达式

答案 6 :(得分:0)

\\.是一个正则表达式字符串解析 . 字面意思。拆分时需要它(因为split()需要正则表达式字符串)。

打印时,您需要直接使用.,而不是"\\."因为println()不需要正则表达式。