我有以下代码:
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。我该如何达到预期的效果?
答案 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()
不需要正则表达式。