Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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.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";
有些字符很难输入程序,比如换行符或制表符