Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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:replaceAll不';不能很好地使用反斜杠?_Java_Regex_Replaceall - Fatal编程技术网

Java:replaceAll不';不能很好地使用反斜杠?

Java:replaceAll不';不能很好地使用反斜杠?,java,regex,replaceall,Java,Regex,Replaceall,我试图用反斜杠替换字符串的开头。 出于某种奇怪的原因,replaceAll函数不喜欢反斜杠 String jarPath = "\\\\xyz\\abc\\wtf\\lame\\"; jarPath = jarPath.replaceAll("\\\\xyz\\abc", "z:"); 我应该做些什么来解决这个问题 谢谢。replaceAll()使用regexps,它使用反斜杠作为转义字符。此外,Java字符串语法还使用反斜杠作为转义字符。这意味着您需要将所有反斜杠加倍以获得所需: Strin

我试图用反斜杠替换字符串的开头。 出于某种奇怪的原因,replaceAll函数不喜欢反斜杠

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\xyz\\abc", "z:");
我应该做些什么来解决这个问题

谢谢。

replaceAll()使用regexps,它使用反斜杠作为转义字符。此外,Java字符串语法还使用反斜杠作为转义字符。这意味着您需要将所有反斜杠加倍以获得所需:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
replaceAll()使用regexps,它使用反斜杠作为转义字符。此外,Java字符串语法还使用反斜杠作为转义字符。这意味着您需要将所有反斜杠加倍以获得所需:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");

由于replaceAll()使用的模式类将其视为特殊字符,因此需要(再次)将每个反斜杠加倍:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");

Java字符串将反斜杠视为转义字符,因此replaceAll看到的是:
\\\\xyz\\abc
。但replaceAll也将反斜杠视为转义字符,因此正则表达式成为字符:
\
z
c
您需要将每个反斜杠(再次)加倍为replaceAll()使用的模式类将其视为特殊字符:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
Java字符串将反斜杠视为转义字符,因此replaceAll看到的是:
\\\\xyz\\abc
。但replaceAll也将反斜杠视为转义字符,因此正则表达式成为字符:
\
c

jarPath = jarPath.replaceAll("\\\\\\\\xyz\\\\abc", "z:");
对于字符串中的每个'\',应将'\'放在
replaceAll
方法中


对于字符串中的每个“\”,您应该将“\”放在
replaceAll
方法中。

它不喜欢它,因为
\
是类C语言中的转义字符(甚至在这个论坛上作为转义符),这使得它对于文件分隔符来说是一个糟糕的选择,但这是他们在MS-DOS中引入的一个更改

您遇到的问题是,您必须两次转义
\
,因此
\\host\path
成为字符串中的
\\\host\\path
,但对于正则表达式,必须再次转义:p
\\host\\\\path

如果你能用正斜杠,这就简单多了

String jarPath = "//xyz/abc/wtf/lame/";
jarPath = jarPath.replaceAll("//xyz/abc", "z:");

它不喜欢它,因为
\
是类C语言中的转义字符(甚至在本论坛中作为转义),这使得它对于文件分隔器来说是一个糟糕的选择,但这是他们在MS-DOS中引入的一个更改

您遇到的问题是,您必须两次转义
\
,因此
\\host\path
成为字符串中的
\\\host\\path
,但对于正则表达式,必须再次转义:p
\\host\\\\path

如果你能用正斜杠,这就简单多了

String jarPath = "//xyz/abc/wtf/lame/";
jarPath = jarPath.replaceAll("//xyz/abc", "z:");

replaceAll
需要一个正则表达式作为其输入字符串,然后在每个实例中匹配并替换该字符串。反斜杠是正则表达式中的一个特殊转义字符,为了匹配它,需要另一个反斜杠来转义它。因此,要将字符串与
“\”
匹配,需要一个带“\”的正则表达式

要匹配字符串
“\\\\xyz\\abc”
,您需要正则表达式
“\\xyz\\\\abc”
(请注意,每个源代码都有一个额外的
\
):


replaceAll
需要一个正则表达式作为其输入字符串,然后在每个实例中匹配并替换该字符串。反斜杠是正则表达式中的一个特殊转义字符,为了匹配它,需要另一个反斜杠来转义它。因此,要将字符串与
“\”
匹配,需要一个带“\”的正则表达式

要匹配字符串
“\\\\xyz\\abc”
,您需要正则表达式
“\\xyz\\\\abc”
(请注意,每个源代码都有一个额外的
\
):


您可以在用例中使用replace方法代替replaceAll。如果我没有弄错的话,它不使用regex。

您可以在用例中使用replace方法代替replaceAll。如果我没有弄错的话,它不使用正则表达式。

您也可以使用
replace()
方法,该方法将从
字符串中删除
\\\\\xyz\\abc

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");
您还可以使用
replace()
方法,该方法将从
字符串中删除
\\\\\xyz\\abc

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");

replaceAll方法使用正则表达式,这意味着您必须转义斜杠。在您的情况下,使用String.replace可能有意义:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");

replaceAll方法使用正则表达式,这意味着您必须转义斜杠。在您的情况下,使用String.replace可能有意义:

String jarPath = "\\\\xyz\\abc\\wtf\\lame\\";
jarPath = jarPath.replace("\\\\xyz\\abc", "z:");

只是遇到了类似的问题

如果在replaceAll函数的第二部分中使用反斜杠(),反斜杠将消失,为了避免这种情况,可以使用Matcher类

String assetPath="\Media Database\otherfolder\anotherdeepfolder\finalfolder";

String assetRemovedPath=assetPath.replaceAll("\\\\Media Database(.*)", Matcher.quoteReplacement("\\Media Database\\_ExpiredAssets")+"$1");

system.out.println("ModifiedPath:"+assetRemovedPath);
印刷品:

\Media Database\_ExpiredAssets\otherfolder\anotherdeepfolder\finalfolder

希望有帮助

刚刚遇到了类似的问题

如果在replaceAll函数的第二部分中使用反斜杠(),反斜杠将消失,为了避免这种情况,可以使用Matcher类

String assetPath="\Media Database\otherfolder\anotherdeepfolder\finalfolder";

String assetRemovedPath=assetPath.replaceAll("\\\\Media Database(.*)", Matcher.quoteReplacement("\\Media Database\\_ExpiredAssets")+"$1");

system.out.println("ModifiedPath:"+assetRemovedPath);
印刷品:

\Media Database\_ExpiredAssets\otherfolder\anotherdeepfolder\finalfolder

希望有帮助

对于答案中的每个
'\'
,您应该将
'\\'
放在mrkup中。对于答案中的每个
'\'
,您应该将
'\\'
放在mrkup中。这是一个示例字符串。实际字符串是Windows共享路径,因此我无法替换它。它是一个示例字符串。实际字符串是Windows共享路径,因此我无法替换它。