java - 用Java中的反斜杠替换字符串中的所有点

标签 java string

以下代码将完全限定类名(可以是任何字符串)中的所有点替换为反斜杠。

String str=Test.class.getName().replaceAll("\\.", "\\\\") + ".class";
System.out.println(str);

替换字符串需要四个反斜杠。


假设替换字符串是文件路径中的分隔符,我想使用 java.io.File.separator 使其独立于不同的操作系统。

String separator=File.separator+File.separator
String str=Test.class.getName().replaceAll("\\.", separator) + ".class "
System.out.println(str);

在这种情况下,它只使用两个反斜杠。为什么不像前面的例子那样需要四个反斜杠?

最佳答案

Java 字符串由字符组成。为了允许 Java 程序员输入字符串作为“常量”和 Java 代码的一部分,该语言允许您将它们输入为用“”引号包围的字符......

 String str = "this is a string";

有些字符很难在程序中输入,例如换行符或制表符。 Java 引入了一种转义机制,允许程序员将这些字符输入到 String 中。转义机制是“\”反斜杠。

 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 上工作(分隔符不需要转义。做你所做的事情更糟糕,即加倍文件分隔符:

File.separator+File.separator

正确的做法是用Matcher.quoteReplacement(...) 正确地转义正则表达式的替换端。

System.out.println(Test.class.getName().replaceAll("\\.",
      Matcher.quoteReplacement(File.separator)) + ".class ")

关于java - 用Java中的反斜杠替换字符串中的所有点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19745643/

相关文章:

java - 检查 PriorityQueue 中对象的字段

java - 观察者和线程

java - Jetty 服务器中项目部署期间发生 BeanCreationException

c - 获取准确的用户输入,c

python - 在Python SQLite语句中插入字符串

c# - 解析变量 URI(RegEx、Uri、字符串函数?)c#

java - my 给出一个空结果集。我的 JTable 是空的。不应该是这样

java - 临时电子邮件地址概念

java - Antlr 输入字符串时出错

performance - GWT 字符串连接运算符 + 与 stringbuffer