如何在scala中将字符串中的\\替换为\?

如何在scala中将字符串中的\\替换为\?,scala,typesafe,Scala,Typesafe,我正在尝试使用scala中的typesafe配置解析一个文件。该文件具有要作为配置加载到我的应用程序中的键值对。 is键是一个正则表达式。 例如:“ASD\\\.KL.\\\”=“somevalue” 正则表达式必须作为“ASD\.KL.*\”加载。 它不适用于类型安全配置工厂,但适用于属性配置。 因此,我试图替换“ASD\\.KL.\\..”.replaceAll(“\\\\”,“\\”),但这也不起作用。 非常感谢您的帮助。您应该使用unescape“raw”字符串来获取相应的Java/Sc

我正在尝试使用scala中的typesafe配置解析一个文件。该文件具有要作为配置加载到我的应用程序中的键值对。 is键是一个正则表达式。 例如:
“ASD\\\.KL.\\\”=“somevalue”

正则表达式必须作为“ASD\.KL.*\”加载。 它不适用于类型安全配置工厂,但适用于属性配置。 因此,我试图替换
“ASD\\.KL.\\..”.replaceAll(“\\\\”,“\\”)
,但这也不起作用。
非常感谢您的帮助。

您应该使用unescape“raw”字符串来获取相应的Java/Scala字符串,而不是尝试进行特定的替换,因为它将考虑任何原始字符串的“raw”性质,而不仅仅是您的特殊情况

为公共语言“”添加以下依赖项

libraryDependencies += "commons-lang" % "commons-lang" % "2.6"
现在,您可以使用
commons lang

import org.apache.commons.lang.StringEscapeUtils

val rawString = raw"ASD\\.KL.*\\."
// rawString: String = ASD\\.KL.*\\.

val requiredString = StringEscapeUtils.unescapeJava(rawString)
// requiredString: String = ASD\.KL.*\.

您不应该尝试执行特定的替换,而应该使用unescape“raw”字符串来获得相应的Java/Scala字符串,因为它将处理任何原始字符串的“raw”性质,而不仅仅是您的特殊情况

为公共语言“”添加以下依赖项

libraryDependencies += "commons-lang" % "commons-lang" % "2.6"
现在,您可以使用
commons lang

import org.apache.commons.lang.StringEscapeUtils

val rawString = raw"ASD\\.KL.*\\."
// rawString: String = ASD\\.KL.*\\.

val requiredString = StringEscapeUtils.unescapeJava(rawString)
// requiredString: String = ASD\.KL.*\.
试试这个

"ASD\\.KL.*\\.".replace("\\", "/"); 

试试这个

"ASD\\.KL.*\\.".replace("\\", "/"); 


为了匹配文字
\
字符,必须使用正则表达式
\
,因为
\
在正则表达式中有特殊含义,需要转义

为了编写regex
\\
必须使用
“\\\\\”
,因为
\
在Java(和Scala)字符串中有特殊含义,需要转义。或者,您可以对同一正则表达式使用
raw“\\”

为了匹配两个连续的
\\
,您必须使用
“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>”
作为字符串

根据JavaDoc,字符
\
replaceAll
的替换部分也有特殊含义,并且需要转义

请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果不同于将其视为文字替换字符串时的结果;见Matcher.replaceAll。如果需要,可以使用Matcher.quoteReplacement(java.lang.String)来抑制这些字符的特殊含义

这就是它最后的样子

scala> import java.util.regex.Matcher
import java.util.regex.Matcher

scala> val s = raw"ASD\\.KL.*\\."
s: String = ASD\\.KL.*\\.

scala> s.replaceAll(raw"\\\\", Matcher.quoteReplacement(raw"\"))
res0: String = ASD\.KL.*\.

scala> s.replaceAll("\\\\\\\\", Matcher.quoteReplacement("\\"))
res1: String = ASD\.KL.*\.

为了匹配文字
\
字符,必须使用正则表达式
\
,因为
\
在正则表达式中有特殊含义,需要转义

为了编写regex
\\
必须使用
“\\\\\”
,因为
\
在Java(和Scala)字符串中有特殊含义,需要转义。或者,您可以对同一正则表达式使用
raw“\\”

为了匹配两个连续的
\\
,您必须使用
“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/code>”
作为字符串

根据JavaDoc,字符
\
replaceAll
的替换部分也有特殊含义,并且需要转义

请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果不同于将其视为文字替换字符串时的结果;见Matcher.replaceAll。如果需要,可以使用Matcher.quoteReplacement(java.lang.String)来抑制这些字符的特殊含义

这就是它最后的样子

scala> import java.util.regex.Matcher
import java.util.regex.Matcher

scala> val s = raw"ASD\\.KL.*\\."
s: String = ASD\\.KL.*\\.

scala> s.replaceAll(raw"\\\\", Matcher.quoteReplacement(raw"\"))
res0: String = ASD\.KL.*\.

scala> s.replaceAll("\\\\\\\\", Matcher.quoteReplacement("\\"))
res1: String = ASD\.KL.*\.

解释得很好。非常感谢。解释得很好。非常感谢。