如何替换通过属性加载的字符串中的空格



我正在从文件加载属性,该属性包含路径(Windows路径),我需要规范化它以创建可用路径。问题是我无法替换"\"。

这是我的测试类:

public class PathUtil {
public static String normalizeEscapeChars(String source) {
String result = source;
result = result.replace("b", "/b");
result = result.replace("f", "/f");
result = result.replace("n", "/n");
result = result.replace("r", "/r");
result = result.replace("t", "/t");
result = result.replace("\", "/");
result = result.replace(""", "/"");
result = result.replace("'", "/'");
return result;
}
public static void main(String[] args) {
try(FileInputStream input = new FileInputStream("C:\Users\Rakieta\Desktop\aaa.properties")) {
Properties prop = new Properties();
prop.load(input);
System.out.println(PathUtil.normalizeEscapeChars(prop.getProperty("aaa")));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

此处属性文件:

aaa=Intermixkoza , intermixtrace

实际输出为:

Intermixkoza , intermix/trace

所需的输出是:

Intermix/koza , intermix/trace

有什么建议吗?

当我复制您的代码时,我的 IDE 抛出了一个错误,指出k不是有效的转义字符。所以我删除了整行。

result = result.replace("k", "/k");
// I have not seen that escape character (Correct me if I am wrong)

我的输出是

aaa=Intermix/koza , intermix/trace

或者你试试康纳说的

result = result.replace("\k", "/k");
// This code is replacing k with /k in Intermixkoza. So it is kinda hard coded.

这也给出了相同的结果。

反斜杠已经由java.util.Properties类解释。

要绕过这一点,您可以扩展它并调整load(InputStream)方法,如以下答案所示:

public class PropertiesEx extends Properties {
public void load(FileInputStream fis) throws IOException {
Scanner in = new Scanner(fis);
ByteArrayOutputStream out = new ByteArrayOutputStream();
while(in.hasNext()) {
out.write(in.nextLine().replace("\","\\").getBytes());
out.write("n".getBytes());
}
InputStream is = new ByteArrayInputStream(out.toByteArray());
super.load(is);
}
}

在 java 中使用双反斜杠\转义反斜杠。

相关内容

  • 没有找到相关文章

最新更新