2014-11-22 45 views
-1

美好的一天。很抱歉,模糊的標題。Android/Java - 刪除子串從最後一個字符開始,直到某個字符

我有一個Android應用程序,我有一個自定義listView,在那個自定義ListView中,我有項目名稱。例如,該列表可以看起來像:

  1. 項A
  2. 例題乙
  3. 樣本列表項C
  4. 實施例(項目)d
  5. 最後(實施例)E項

用戶可以執行操作和列表更新如下:

  1. 項A(FACTOR單位)
  2. 例題乙
  3. 樣本列表項C
  4. 實施例(項目)d
  5. 最後(實施例)項目(E)

正如你可以看到,第一個項目被添加到基於用戶輸入。我想刪除這個附加的用戶輸入(包括括號和括號之前的空格)這個附加的用戶輸入的長度不同,所以我不能做String item = item.replace(item.substring((str.length()-lengthOfInput),""));

我不能做子串刪除任何東西,因爲項目4和5,除了用括號括起來的將來用戶輸入之外,在括號中包含字符串。

現在我正在考慮的解決方案是檢查項目的最後一個字符,如果它是一個),然後我遍歷串向後,直到我打了(,然後檢查子字符串包含OF

我檢查了我的物品數據庫,並且以括號括起來的子字符串結尾的所有物品都不包含模式UNIT OF FACTOR,這讓我的解決方案記住了可行性。

現在,我的問題是,這是否有一個簡短的解決方案?我知道我可以做一個for循環遍歷最後一個位置的字符串,在某些情況下可以使用),並向後遍歷,直到我點擊(。打到第一個(後,我有我的子字符串。然後我可以檢查該子字符串是否包含OF,如果是的話,我修剪它,否則,它不是我想要刪除的字符串。

有沒有關於如何做到這一點的較短版本?對不起,如果我在手頭已經有可行的解決方案時尋求幫助。我正在尋求幫助,因爲我不想在較短的解決方案時編寫長期解決方案。此外,當我在輸入此問題時,我制定了上述解決方案 - 對此表示歉意。

任何幫助,非常感謝。謝謝。

回答

1

您可以使用表格的一個非常基本的正則表達式

\\([^)]*OF[^)]*\\ 

OR

用積極的向前看的

\\([^)]*(?=OF).*\\) 

例如

String str = "Item A (UNIT OF FACTOR)", str1= "Item A (B)";; 
str = str.replaceAll("\\([^)]*OF[^)]*\\)", ""); 
str1 = str1.replaceAll("\\([^)]*OF[^)]*\\)", ""); 
System.out.println(str); 
System.out.println(str1); 


str = "Item A (UNIT OF FACTOR)"; 
str1 = "Item A (B)"; 
str = str.replaceAll("\\([^)]*(?=OF).*\\)", ""); // Using postive look ahead 
str1 = str1.replaceAll("\\([^)]*(?=OF).*\\)", ""); // Using postive look ahead 
System.out.println(str); 
System.out.println(str1); 

會給出一個輸出

Item A 
Item A (B) 
Item A 
Item A (B) 
+0

這將無法正常工作,因爲如果字符串是'Item(b)',輸出將是Item而不是Item(b)'。我只想刪除括號內的子字符串,如果它包含「OF」。 – Razgriz 2014-11-22 12:34:34

+0

@Razgriz我編輯了這個答案。希望它可以幫助你 – nu11p01n73R 2014-11-22 12:42:34

+0

工作得很好,謝謝! – Razgriz 2014-11-22 12:59:53

相關問題