Java 是否有任何方法可以转义路径字符串中的空格、大括号和其他字符?

Java 是否有任何方法可以转义路径字符串中的空格、大括号和其他字符?,java,Java,我希望能够转义路径字符串中的符号,这样我就可以将其传递给bash,而无需加引号 也就是说,我有一个文件sample(1).txt 我想将此字符串转换为sample\\(1\).txt。空格和大括号是符号的一个例子,应该明确转义 我想使用一种方法,它将转义所有应该转义的字符 默认库或其他流行库中可能有一个。您可以使用String.replace()方法在特殊字符之前包含或删除任何字符。您可以使用String.replace()在特殊字符之前包含或删除任何字符的方法。查看Pattern/Matche

我希望能够转义路径字符串中的符号,这样我就可以将其传递给bash,而无需加引号

也就是说,我有一个文件
sample(1).txt

我想将此字符串转换为
sample\\(1\).txt
。空格和大括号是符号的一个例子,应该明确转义

我想使用一种方法,它将转义所有应该转义的字符


默认库或其他流行库中可能有一个。

您可以使用
String.replace()
方法在特殊字符之前包含或删除任何字符。

您可以使用
String.replace()
在特殊字符之前包含或删除任何字符的方法。

查看Pattern/Matcher/StringBuffer类:

Pattern p = Pattern.compile("([ ()])"); //regex setup
Matcher m = p.matcher("replace these spaces (2).txt"); //sample input
StringBuffer s = new StringBuffer();
while (m.find())
    m.appendReplacement(s, "\\\\" + m.group(1));
m.appendTail(s); //add the last tail of code
System.out.println(s.toString());
在main中运行时的输出示例:

// replace\ these\ spaces\ \(2\).txt

查看Pattern/Matcher/StringBuffer类:

Pattern p = Pattern.compile("([ ()])"); //regex setup
Matcher m = p.matcher("replace these spaces (2).txt"); //sample input
StringBuffer s = new StringBuffer();
while (m.find())
    m.appendReplacement(s, "\\\\" + m.group(1));
m.appendTail(s); //add the last tail of code
System.out.println(s.toString());
在main中运行时的输出示例:

// replace\ these\ spaces\ \(2\).txt

您没有说明选择哪些字符是符号的标准是什么,但是假设您想要一些可以转换为URI的东西,那么java类
java.io.File
和接口
java.io.Path
就是出于这个原因(以及一些其他原因)提供的

以下是java 7+版本:

// toASCIIString is not usually necessary
String withoutSymbols = new java.io.File("sample (1).txt").toUri().toASCIIString();

您没有说明选择哪些字符是符号的标准是什么,但是假设您想要一些可以转换为URI的东西,那么java类
java.io.File
和接口
java.io.Path
就是出于这个原因(以及一些其他原因)提供的

以下是java 7+版本:

// toASCIIString is not usually necessary
String withoutSymbols = new java.io.File("sample (1).txt").toUri().toASCIIString();

可能重复的,传递它们有什么问题?这似乎是一个问题。你能解释一下你面临的实际问题吗?问题是它只是路径的一部分,另一部分不受我控制,不幸的是,我同意Real怀疑论者的观点;这听起来像是个XY问题。听起来您可能误用了bash(即,使用
bash-c'命令arg1 arg2'
,而不仅仅是
命令
arg1
arg2
);通常,您直接将参数传递给ProcessBuilder,在这种情况下,您根本不需要引用它们。欢迎使用堆栈溢出!为了解决这个问题,你能在内容中有一个更好的标题和更详细的信息吗?可能是重复的,传递它们有什么错?这似乎是一个问题。你能解释一下你面临的实际问题吗?问题是它只是路径的一部分,另一部分不受我控制,不幸的是,我同意Real怀疑论者的观点;这听起来像是个XY问题。听起来您可能误用了bash(即,使用
bash-c'命令arg1 arg2'
,而不仅仅是
命令
arg1
arg2
);通常,您直接将参数传递给ProcessBuilder,在这种情况下,您根本不需要引用它们。欢迎使用堆栈溢出!为了解决这个问题,你能在内容中有一个更好的标题和更详细的信息吗?