在Java中用反斜杠替换字符串中的所有点
以下代码将完全限定类名(可以是任何字符串)中的所有点替换为反斜杠 替换字符串需要四个反斜杠在Java中用反斜杠替换字符串中的所有点,java,string,Java,String,以下代码将完全限定类名(可以是任何字符串)中的所有点替换为反斜杠 替换字符串需要四个反斜杠 System.out.println(Test.class.getName().replaceAll("\\.", Matcher.quoteReplacement(File.separator)) + ".class "); 假设替换字符串是文件路径中的分隔符,我想使用java.io.file.separator使其独立于不同的操作系统 String separator=File.separ
System.out.println(Test.class.getName().replaceAll("\\.",
Matcher.quoteReplacement(File.separator)) + ".class ");
假设替换字符串是文件路径中的分隔符,我想使用
java.io.file.separator
使其独立于不同的操作系统
String separator=File.separator+File.separator
String str=Test.class.getName().replaceAll("\\.", separator) + ".class "
System.out.println(str);
在这种情况下,它只使用两个反斜杠。为什么不像前一种情况那样需要四个反斜杠?当它接收纯文本时,应该使用
replace()
,而replaceAll()
接受正则表达式:
.replace(".", "\\");
关于文件分隔符,您可以使用
/
,因为它可以在Java中的所有操作系统上工作。您应该使用replace()
,因为它接收纯文本,而replaceAll()
采用正则表达式:
.replace(".", "\\");
关于文件分隔符,您可以使用
/
,因为它可以在Java中的所有操作系统上工作。四个反斜杠用于对该方法使用的两个反斜杠进行编码<代码>“\\\”被解释为:
"\\" (an escaped backslash)
"\\" (another escaped backslash)
第一个和第三个反斜杠用于转义字符串中的第二个和第四个反斜杠。如果反斜杠存储在变量(如File.separator
)中,则不需要反斜杠
要获得更清晰的答案,请尝试以下代码:
System.out.println("\\\\");
它打印
\
四个反斜杠用于对该方法使用的两个反斜杠进行编码<代码>“\\\”被解释为:
"\\" (an escaped backslash)
"\\" (another escaped backslash)
第一个和第三个反斜杠用于转义字符串中的第二个和第四个反斜杠。如果反斜杠存储在变量(如File.separator
)中,则不需要反斜杠
要获得更清晰的答案,请尝试以下代码:
System.out.println("\\\\");
它打印
\
,因为文件.separator
是
public static final String separator = "" + separatorChar;
public static final char separatorChar = fs.getSeparator(); //gotten from system properties
其中separatorChar
是用于文件分离的系统特定的char
。在这种情况下,你不需要逃避任何事情
为什么不像前面的例子那样需要四个反斜杠呢
转义用于字符串文本。
fs.getSeparator()
所做的是(简单地说)
它在Windows上返回字符串
\
getseparator()
然后获取该字符串的charAt(0)
,即char'\'
。当与中的“
连接时,将转换为字符串
public static final String separator = "" + separatorChar;
这是在运行时完成的,因此不会计算为字符串,因此不需要转义。因为文件.separator
是
public static final String separator = "" + separatorChar;
public static final char separatorChar = fs.getSeparator(); //gotten from system properties
其中separatorChar
是用于文件分离的系统特定的char
。在这种情况下,你不需要逃避任何事情
为什么不像前面的例子那样需要四个反斜杠呢
转义用于字符串文本。
fs.getSeparator()
所做的是(简单地说)
它在Windows上返回字符串
\
getseparator()
然后获取该字符串的charAt(0)
,即char'\'
。当与中的“
连接时,将转换为字符串
public static final String separator = "" + separatorChar;
这是在运行时完成的,因此不会计算为字符串,因此不需要转义。Java字符串由字符组成。为了允许java程序员将字符串作为“常量”和java代码的一部分输入,该语言允许您将它们作为字符输入,并用“.”引号括起来
String str = "this is a string";
有些字符很难输入到程序中,如换行符或制表符。Java引入了转义机制,允许程序员将这些字符输入到字符串中。转义机制是“\”反斜杠
String str = "this contains a tab\t and newline\n";
问题是,现在没有简单的方法输入反斜杠,因此输入反斜杠必须自行退出:
String str = "this contains a backslash \\"
下一个问题是正则表达式很复杂,它们还使用反斜杠\
作为转义字符
例如,现在在perl中,正则表达式\.
将与确切的字符“.”匹配,因为在正则表达式中“.”是特殊的,需要用“\”转义。要在Java程序中捕获该序列\.
(作为程序中的字符串常量)我们需要将“\”转义为\
,我们的Java等价正则表达式是\.
。现在,在perl中,匹配实际反斜杠字符的正则表达式是\
。同样,我们需要在Java中的实际代码中转义这两个表达式,它是\\
因此,这里的意义在于windows中的文件分隔符字符是反斜杠\
。此单个字符存储在file.separator字段中。如果要从Java程序中键入相同的字符,我们必须将其转义为\\
,但“\”已存储在字段中,因此不需要重新编译将其替换为Java程序,但我们需要将其替换为正则表达式
有两种方法可以对正则表达式进行转义。您可以选择在其前面添加反斜杠,方法是:
"\\" + File.separator
但这是一种不好的方法,因为它在Unix上不起作用(在Unix上不需要转义分隔符。更糟糕的是,您所做的是将文件分隔符加倍:
File.separator+File.separator
正确的方法是使用
Java字符串是由字符组成的。为了允许Java程序员将字符串作为“常量”和Java代码的一部分输入,该语言允许您将其作为字符输入,并用“.”引号括起来
String str = "this is a string";
有些字符很难输入程序,比如换行符或制表符