2014-11-17 284 views
0

我在Java代碼中一個字符串,它看起來像這樣提取部分字符串從一個字符串在java中

String s="/wps/wcm/connect/ae539d07-ce65-434e-9d9e-9e4ade8d4aa1/Extra+Talk+Time+Voucher_29_may.xls?MOD=AJPERES&CACHEID=ae539d07-ce65-434e-9d9e-9e4ade8d4aa1";

我如何提取,"Extra+Talk+Time+Voucher_29_may.xls"從這個?

順便說一句,我是新來的java。

+0

我發現,有多個正確答案here.cheers – Raj

回答

2

這不是花哨的,但有時簡單直接很好。我已經爲你一步一步地解決了這個問題。

public static void main(String[] args) { 

    String parseMe = "/wps/wcm/connect/ae539d07-ce65-434e-9d9e-9e4ade8d4aa1/Extra+Talk+Time+Voucher_29_may.xls?MOD=AJPERES&CACHEID=ae539d07-ce65-434e-9d9e-9e4ade8d4aa1"; 
    String[] questionMarkTokens = parseMe.split("\\?"); 
    String beforeQuestionMark = questionMarkTokens[0]; 
    String[] slashTokens = beforeQuestionMark.split("/"); 
    String afterLastSlashBeforeQuestionMark = slashTokens[slashTokens.length - 1]; 
    System.out.println(afterLastSlashBeforeQuestionMark); 
} 

\\?正在照顧java中更神祕的問題之一。 Split需要一個正則表達式。正則表達式對於?有特殊的含義。所以如果你想把它作爲一個字面問號,你必須用斜槓來逃避它。但是,當解析字符串時,它也使用反斜槓作爲轉義字符。所以你必須用另一個斜線來逃避斜線才能看到前一個斜線。

這就是說,米沙可能是對的。有很多方法可以打破解析。如果你可以使用罐裝做的話。仍然很高興學會如何自己做。

5

使用replaceAll()使用正則表達式來提取它:

String filename = str.replaceAll(".*/([^/]+)\\?.*", "$1"); 

這整個輸入相匹配,而捕獲所述靶標(如組1),與第1組替換匹配(整個串)(使用一個正則表達式返回參考)。

正則表達式將所有內容匹配到一個斜線,然後捕獲所有不是斜線直到(但不包括)問號,然後匹配任何後面的內容。

+0

我想這就是他想要的 [^ \ /] * \。xls的 –

+0

@fady自己嘗試一下,看看它是否工作。而且,斜槓字符從不需要在正則表達式中轉義。永遠。它沒有特別的意義。 – Bohemian

2

你可以拆分基於/字符串:

String[] arr = s.split("\/");

然後取出參數:

String filename = arr[arr.length()-1].split("\?",1);

3

您可以跳過正則表達式(因爲你不需要它的力量或你呢?)和使用子串:

s1 = s.substring(s.lastIndexOf('/'), s.lastIndexOf('?')); 

這將檢查您的字符串中位於您的最後正斜槓和問號之間的部分。如果其中任何一個不是真的(意味着你有其他部分你感興趣),但它不會工作。

4

不解析網址,你自己

String s="/wps/wcm/connect/ae539d07-ce65-434e-9d9e-9e4ade8d4aa1/Extra+Talk+Time+Voucher_29_may.xls?MOD=AJPERES&CACHEID=ae539d07-ce65-434e-9d9e-9e4ade8d4aa1"; 
Path p = Paths.get(URI.create(s).getPath()); 
String filename = p.getFileName().toString(); 
2

你可以試試這個:

String b = s.substring(s.lastIndexOf("/")+1 , s.indexOf("?")); 

,這將給你的所有過去的/和第一?之間的文本,但不包括其中的兩個。輸出是:

Extra+Talk+Time+Voucher_29_may.xls 
1

使用分割字符串

String[] g = s.split("/"); 
    String sas = g[5]; 
    String[] filenamesa = sas.split("\\?"); 
    System.out.println(filenamesa[0]);