2012-08-09 58 views
1

我有很多像這樣的數據庫字符串:"\\LDDESKTOP\news\1455Bloomberg Document # 180784.txt"。我想在最後一個斜槓後獲得文件名。我應該如何從str中獲取此特定文本?

我這樣做只是在一個正常的方式:

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

但因爲單斜槓是用於改變含義這是行不通的。 java中有沒有像Python一樣告訴編譯器把它看作一個普通的字符串,如str=r'.......'

或者如何將字符串更改爲"\\\\LDDESKTOP\\news\\1455Bloomberg Document # 180784.txt"。所以我可以將它傳遞給File Object來讀取這個文件。

我應該怎麼做?或以其他方式解決這個問題。

謝謝。在新聞臺

列命名路徑(VARCHAR(150))就是這樣「\ LDDESKTOP \新聞\ 1362Bloomberg文檔#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; 
} 
+0

如果你System.out.println(newsFileNames);在你回來之前,這會給你什麼?它應該是某種列表。我只是無法單獨根據該代碼告訴實際輸出。 – MrHappyAsthma 2012-08-09 04:26:37

+0

只是一個像這樣的字符串列表:「\\ LDDESKTOP \ news \ 1455Bloomberg Document#180784.txt」,單斜槓而不是雙。 – xuqin1019 2012-08-09 04:31:03

+0

那麼你在問如何修改每個字符串以使所有雙反斜槓? – MrHappyAsthma 2012-08-09 04:31:40

回答

0

感謝您所做的所有努力。最後,我想我已經找到了答案。

不用處理java程序中的字符串,我直接使用sql函數處理字符串。

以下是我所做的。

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

這確實做得很好!

3

您使用Escape Sequences指定某些特殊字符也有一個分配給他們的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 
+0

問題是字符串是從數據庫中獲取的。我無法改變它 – xuqin1019 2012-08-09 04:08:23

+0

你能告訴我一個如何從數據庫中獲取它們的例子嗎?你是從文本文件或其他東西中讀取它們嗎? – MrHappyAsthma 2012-08-09 04:09:02

+0

只是從名爲path的列中讀取的。它被定義爲varchar(150) – xuqin1019 2012-08-09 04:10:13

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」是換行符。

+0

我無法更改字符串,因爲它是從數據庫中讀取的 – xuqin1019 2012-08-09 04:08:49

+1

@ xuqin1019我明白,來自數據庫的字符串不能改變。告訴我們字符串存儲的格式,如果格式是像在你的問題中提到的那樣,那麼獲取文件的名稱是簡單的,由habib發佈或happayasthma – Meenakshi 2012-08-09 04:52:29

+0

我想String path = rs.getString(1);是新的字符串對象 – 2012-08-09 04:58:03

相關問題