Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串长度-结果不正确?_Java_String - Fatal编程技术网

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”);