1

我在数据库中有很多这样的字符串:"\\LDDESKTOP\news\1455Bloomberg Document # 180784.txt"。我想在最后一个斜杠之后获取文件名。

我只是以正常方式这样做:

str.substring(str.lastIndexOf("\\")+1)

但它不起作用,因为单斜杠用于更改含义。java中有没有办法像python一样告诉编译器将其视为像这样的纯字符串,str=r'.......'.

或者如何将字符串更改为"\\\\LDDESKTOP\\news\\1455Bloomberg Document # 180784.txt". 所以我可以将它传递给 File Object 来读取这个文件。

我该怎么做?或其他解决此问题的方法。

谢谢。

news 表中名为 path(varchar(150)) 的列是这样的“\LDDESKTOP\news\1362Bloomberg Document #180691.txt”

我在路径上做了一个正常的选择。

编码 :

public List<String> getNewsFileName(String startTime,String endTime) {
    List<String> newsFileNames = new ArrayList<String>();
    String tableName = ConfigFile.getConfig("configuration.txt","SQLServerTable");
    String sql = "select Path from [" + tableName + "] where localtime >= '" + startTime + "' and localtime <= '" + endTime + "'";
    try {
        if(connection==null) {
            InvertedIndex.logger.log(Level.SEVERE, "Database connection has not been initialized");
            System.exit(-1);
        }
        stmt=connection.createStatement();
        ResultSet rs = stmt.executeQuery(sql);

        while(rs.next()) {
            String path=rs.getString(1);
            newsFileNames.add(path);
        }

    } catch (SQLException e) {
        InvertedIndex.logger.log(Level.SEVERE,"Fail to store news");
    }
    return newsFileNames;
}
4

3 回答 3

3

您使用转义序列来指定某些特殊字符,这些特殊字符也具有分配给它们的 java 属性。

为了在字符串中打印单个反斜杠字符,您使用一组 2 个反斜杠\\

String string = new String("\\\\LDDESKTOP\\news\\1455Bloomberg Document # 180784.txt");

String str = string.substring(string.lastIndexOf("\\")+1);

System.out.println(str);

这打印

1455Bloomberg Document # 180784.txt

编辑1:

获得字符串后,您可以使用相同的转义字符将其传回。

String string = "\\\\LDDESKTOP\\news\\" + str;

这将输出原始

\\LDDESKTOP\news\1455Bloomberg Document # 180784.txt

编辑2:

根据您的要求,为了将所有单反斜杠转换为双反斜杠,您必须同时使用转义序列和字符串“替换”方法。

如果你有这个字符串:

String string = new String("\\\\LDDESKTOP\\news\\1455Bloomberg Document # 180784.txt");

您需要调用此代码以“加倍”每个反斜杠:

String newString = string.replace("\\", "\\\\");

这会产生以下结果:

//Note this is before we print it.  This illustrates all the escape sequences.
\\\\\\\\LDDESKTOP\\\\news\\\\1455Bloomberg Document # 180784.txt

字符串本身将如下所示:

\\\\LDDESKTOP\\news\\1455Bloomberg Document # 180784.txt
于 2012-08-09T04:02:58.700 回答
2

这段代码:

String st = "\\LDDESKTOP\news\1455Bloomberg Document # 180784.txt";

st = st.replace("\n", "\\n");

st = st.replace("\\", "\\\\");

String str = st.substring(st.lastIndexOf("\\")+1);

测试它。"\n" 是换行符。

于 2012-08-09T04:03:22.080 回答
0

感谢您所做的一切努力。最后,我想我找到了答案。

我没有在java程序中处理字符串,而是直接使用sql函数处理字符串。

以下是我所做的。

SELECT * substring(path,len(path)-charindex('\',reverse(path))+2,charindex('\',reverse(path)))
 FROM News

这确实做得很好!

于 2012-08-10T02:22:22.957 回答