1

データベースには次のような文字列がたくさんあります: "\\LDDESKTOP\news\1455Bloomberg Document # 180784.txt". 最後のスラッシュの後にファイル名を取得したい。

私はこれを通常の方法で行います:

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

しかし、単一のスラッシュが変更の意味に使用されているため、機能しません。Python と同じように Java で、コンパイラにこのようなプレーンな文字列と見なすように指示する方法はありますかstr=r'.......'?

または、文字列を に変更する方法"\\\\LDDESKTOP\\news\\1455Bloomberg Document # 180784.txt"。したがって、それを File オブジェクトに渡して、このファイルを読み取ることができます。

どうすればいいですか?または、これを解決する他の方法。

ありがとう。

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 プロパティも割り当てられている特定の特殊文字を指定します。

文字列内の 1 つのバックスラッシュ文字を出力するには、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");

すべてのバックスラッシュを「2 倍にする」には、次のコードを呼び出す必要があります。

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 に答える