将2个反斜杠替换为1个

时间:2011-11-22 10:03:33

标签: java regex

我回答了问题但找不到解决方案。

我有属性文件,用户存储文件的位置。

e.g:

location = C:\images

在对他的回复中,我必须打印出location属性,然后打印出来:

C:images

如果我放在位置:

C:\\images\\

它打印出来就像这样(好像它没有处理字符串:

C:\\images\\

我希望只打印C:\images\

我该怎么做?

这也适用于我想写这样的HTML标签:

<img src ='"+locations+"'>

大多数浏览器会使用双反斜杠提取位置,但我不想依赖它。

修改

我很抱歉 - 我的错误。现在问题很好。请忽略Web浏览器无法访问C:\的表面

修改

我正在使用Jerrsey实现客户端响应,它使用Jax-B来编写响应,如下所示:

    com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo(Object t, MediaType mediaType, Charset c, Marshaller m, OutputStream entityStream) throws JAXBException:

 protected void writeTo(Object t, MediaType mediaType, Charset c,
            Marshaller m, OutputStream entityStream)
            throws JAXBException {
        m.marshal(t, entityStream);
    }

输出流为com.sun.jersey.spi.container.ContainerResponse.CommittingOutputStream

我看到属性只加载了1。

我在WizTools.org

的休息客户端工具中得到了回复

可能是问题吗?

3 个答案:

答案 0 :(得分:2)

你需要逃避反斜杠,但不要使用正斜杠。因此,如果您有一个属性文件:

location = c:\\images\\

那应该没事。

例如,这是一个小型控制台应用程序:

import java.io.*;
import java.util.*;

public class Test {
    public static void main(String[] args) throws Exception {
        Properties properties = new Properties();
        // Would normally close the stream, of course :)
        properties.load(new FileInputStream("test.properties"));
        System.out.println(properties.getProperty("location"));
    }
}

给定一个test.properties文件, 包含前面显示的行,打印出c:\images\没有任何问题。

答案 1 :(得分:2)

反斜杠的使用容易出错。请使用

location=file:/C:/images/

或(建议其文件夹没有落后的“/”)

directory=file:/C:/images

此致

答案 2 :(得分:2)

Java属性文件格式的规范在Properties.load(Reader)方法的javadoc中。它清楚地表明反斜杠必须被转义。它还指出,除了有效转义之外的某个字符后面的反斜杠是静默删除

我只能断定您没有使用load对象的Properties方法之一来加载文件中的属性。而且,实际上,您没有遵循Java属性文件规范。

您可能有某些理由同时执行这两项操作,但如果您这样做,则不应该调用非标准文件格式“属性文件”...因为人们希望Java属性文件遵循规范。


但是,我建议您只使用标准格式/规范,并且只使用Properties.load(...)Properties.save(...)来读取和写入属性文件。