Java 如何替换转义字符?
我正在尝试清理/标准化文件目录的一些用户输入。Windows执行Java 如何替换转义字符?,java,regex,escaping,Java,Regex,Escaping,我正在尝试清理/标准化文件目录的一些用户输入。Windows执行\和*nux/*nix执行/。在java中,必须将\转义为\,否则会出现编译错误 如何从用户输入中读取\,并将其替换为/ private String escapeDirs(String raw) { return raw.replace("\\", "/"); } 这不管用。。。大概是因为它是作为\而不是\读入的。但是我不能做raw.replace(“\”,“/”) 示例用户输入:C:\user\SomeUser\Som
\
和*nux/*nix执行/
。在java中,必须将\
转义为\
,否则会出现编译错误
如何从用户输入中读取\
,并将其替换为/
private String escapeDirs(String raw) {
return raw.replace("\\", "/");
}
这不管用。。。大概是因为它是作为\
而不是\
读入的。但是我不能做raw.replace(“\”,“/”)代码>
示例用户输入:C:\user\SomeUser\SomeDir
如果要为windows和unix构建解决方案,这是开发人员需要注意的问题之一
有两种方法
使用\分别处理Windows的转义字符,并分别处理unix的路径
在windows的路径中也使用/,在unix和windows中也会使用相同的路径
范例
在窗户里
c:/temp的工作原理与c:\temp相同
在Unix中
/tmp/
希望有帮助
谢谢
Abhi使用而不是字符串版本
private static String escapeDirs(String raw) {
return raw.replace('\\', '/');
}
试试这个
public static String backlashReplace(String myStr){
final StringBuilder result = new StringBuilder();
final StringCharacterIterator iterator = new StringCharacterIterator(myStr);
char character = iterator.current();
while (character != CharacterIterator.DONE ){
if (character == '\\') {
result.append("/");
}
else {
result.append(character);
}
character = iterator.next();
}
return result.toString();
}
这项工作:
private String escapeDirs(String raw) {
return raw.replace("\\", "/");
}
replace()
方法实际上会替换所有出现的目标
似乎您最初使用的是替换正则表达式的replaceAll()
。它使这项工作,做它:
private String escapeDirs(String raw) {
return raw.replace("\\\\", "/");
}
反斜杠的正则表达式是\\
,在java中,字符串常量需要对每个常量进行转义,因此需要4个常量。尝试这样做:返回原始值。替换(“\\\”,“/”代码>你能提供用户的示例输入吗?示例用户输入:C:\user\SomeUser\SomeDir
它“不工作”是什么意思?您的示例输入得到了什么而不是您期望的结果?@extremecorders-为什么使用replaceAll
?这个简单的替换不需要使用正则表达式。但是有一天,你会遇到\\ALPHA\C:\Temp
或者甚至只是\?\C:\Very\Very\long\path\long\than\258\characters
。现在怎么办?根据SnakeDoc提供的输入,我已经确定了解决方案。“示例用户输入:C:\user\SomeUser\SomeDir”为什么会有什么不同?@TedHopp,我同意不应该有什么不同,但对于单字符输入,输入中的多个字符是否对应于输出中的一个字符没有任何混淆,因此,如果它仍然不能达到你想要的效果,那么你知道去别处寻找错误。