如何替换通过属性加载的字符串中的空格
How to replaces white spaces from String loaded through properties
我正在从文件加载 属性,属性 包含路径(Windows 路径),我需要对其进行规范化以创建可用路径。问题是我无法替换“\”。
这是我的测试class:
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=Intermix\koza , intermix\trace
实际输出为:
Intermixkoza , intermix/trace
需要的输出是:
Intermix/koza , intermix/trace
有什么建议吗?
使用双反斜杠 \
转义 java 中的反斜杠。
当我复制你的代码时,我的 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
或者你试试 Connor 所说的
result = result.replace("\k", "/k");
// This code is replacing \k with /k in Intermix\koza. So it is kinda hard coded.
这也给出了相同的结果。
反斜杠已被 java.util.Properties
class 解释。
要绕过它,您可以扩展它并调整 load(InputStream)
方法,如 this answer:
所示
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);
}
}
我正在从文件加载 属性,属性 包含路径(Windows 路径),我需要对其进行规范化以创建可用路径。问题是我无法替换“\”。
这是我的测试class:
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=Intermix\koza , intermix\trace
实际输出为:
Intermixkoza , intermix/trace
需要的输出是:
Intermix/koza , intermix/trace
有什么建议吗?
使用双反斜杠 \
转义 java 中的反斜杠。
当我复制你的代码时,我的 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
或者你试试 Connor 所说的
result = result.replace("\k", "/k");
// This code is replacing \k with /k in Intermix\koza. So it is kinda hard coded.
这也给出了相同的结果。
反斜杠已被 java.util.Properties
class 解释。
要绕过它,您可以扩展它并调整 load(InputStream)
方法,如 this answer:
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);
}
}