Java 字符串长度-结果不正确?
我无法理解以下代码的错误:Java 字符串长度-结果不正确?,java,string,Java,String,我无法理解以下代码的错误: System.out.println("TEST:"+"/index/index/(\\d+)/".length()); 输出:测试:19。但正如我看到的,肯定有20个。我的错误在哪里?在java中,\是转义字符 所以:\实际上是一个单独的\ 因此,字符串的这一部分如下所示:(\d+),根据正则表达式的定义,这意味着“1个或多个数字”:在java中,\是一个转义字符 所以:\实际上是一个单独的\ 因此,字符串的这一部分是这样读的:(\d+),根据正则表达式的定义,它
System.out.println("TEST:"+"/index/index/(\\d+)/".length());
输出:测试:19。但正如我看到的,肯定有20个。我的错误在哪里?在java中,
\
是转义字符
所以:\
实际上是一个单独的\
因此,字符串的这一部分如下所示:
(\d+)
,根据正则表达式的定义,这意味着“1个或多个数字”:在java中,\
是一个转义字符
所以:\
实际上是一个单独的\
因此,字符串的这一部分是这样读的:
(\d+)
,根据正则表达式的定义,它意味着“1个或更多的数字”:)不计算转义符引用不计算转义符引用。我不明白为什么我不能在正则表达式中使用\d+而不是\\d+。你能解释一下吗?因为在\d
中,转义字符“escape”与d一起转义,d实际上是未定义的,但如果它是\t
或\n
则它将转义为某个意思。在您的例子中,您需要在正则表达式中使用“实际”斜杠,因此\\给出了它。请参阅:@PashaTurok\
是字符串中的特殊字符。它可用于创建行分隔符,如\n
\r
或制表符\t
,或转义“
(如果我们在字符串中写入\”
,则此双引号将不表示字符串的结尾,而仅表示文字)或者\uxxx
,其中XXXX
部分是十六进制,表示要打印的字符的Unicode索引。所以既然\
是特殊的,我们就不能只写\d
,因为编译器会试图将它解释为特殊的东西。因此,要创建\
文本,我们需要用另一个\
来转义它,这意味着表示一个\
的字符串需要写成“\\\”
@Pshemo谢谢您的详细回答。对于我的web应用程序,我使用regex For Urlpattern-一些保留一些模式的类。首先,我通过代码newurlpatter(“/index/index/(\\d+/”)创建了这个类实例。一切都很好。然后,我将所有模式放在xml文件中,并通过Apache Digester自动创建URL模式。我所观察到的是,只有在xml中放入以下内容时,xml中的模式才起作用。注意,在xml中我使用“(\d+”。怎么解释呢?@Pshemo我的意思是,现在类似这样的东西=新的UrlPattern(attibutes.getValue(“regex”);我不明白为什么不能在regex\d+中使用,而不能在\\d+中使用。你能解释一下吗?因为在\d
中,转义字符“escape”与d一起转义,d实际上是未定义的,但如果它是\t
或\n
则它将转义为某个意思。在您的例子中,您需要在正则表达式中使用“实际”斜杠,因此\\给出了它。请参阅:@PashaTurok\
是字符串中的特殊字符。它可用于创建行分隔符,如\n
\r
或制表符\t
,或转义“
(如果我们在字符串中写入\”
,则此双引号将不表示字符串的结尾,而仅表示文字)或者\uxxx
,其中XXXX
部分是十六进制,表示要打印的字符的Unicode索引。所以既然\
是特殊的,我们就不能只写\d
,因为编译器会试图将它解释为特殊的东西。因此,要创建\
文本,我们需要用另一个\
来转义它,这意味着表示一个\
的字符串需要写成“\\\”
@Pshemo谢谢您的详细回答。对于我的web应用程序,我使用regex For Urlpattern-一些保留一些模式的类。首先,我通过代码newurlpatter(“/index/index/(\\d+/”)创建了这个类实例。一切都很好。然后,我将所有模式放在xml文件中,并通过Apache Digester自动创建URL模式。我所观察到的是,只有在xml中放入以下内容时,xml中的模式才起作用。注意,在xml中我使用“(\d+”。怎么解释呢?@Pshemo我的意思是,现在类似这样的东西=新的UrlPattern(attibutes.getValue(“regex”);