2014-10-03 75 views
-1

我遇到了算法問題。 我有一個地圖(每個鍵int它的十六進制Unicode字符)和一個字符串與Unicode字符。 我想要刪除字符串中的下一個字符,當我在我的地圖中找到一個存在爲鍵的字符時。使用indexOf刪除字符串中的下兩個字符並且映射爲

例如我的地圖中包含這些密鑰:0x111,0x333,0x444,0x555,0x666和我串了:

0x111+0xffff+0x444+0xEEEEE+0x666 

我想將其轉換爲:

0x111 + 0x444到+ 0x666

我有這個,但是這不工作:

private String cleanFlags(String text) { 
     int textLong = text.length(); 
     for (int i = 0; i < textLong; i++) { 
      if (flagCountryEmojis.containsKey(text.codePointAt(text.charAt(i)))) { 
       text = text.replace(text.substring(i + 1, i + 2), ""); 
       textLong-=2; 
      } 
     } 
     return text; 
    } 

我該如何做到這一點?

+0

我錯過了一些我不能完全理解你想要做的事情。你想把我替代的鑰匙去掉嗎? – StackFlowed 2014-10-03 17:43:01

+1

什麼不起作用? (超出數組索引超出範圍的異常,你可能會試圖訪問(i + 1)的字符,這可能不存在)。 – Eran 2014-10-03 17:44:37

回答

1

因爲你沒有提到關於空間的複雜東西,我繼續使用了一系列解決問題的自由:如果這個解決方案解決您的問題

public String cleanFlags(String text){ 

    String [] arr = text.split("+"); 
    String newText = ""; 

    for(int i = 0; i < arr.length; i++){ 
     if(flagCountryEmojis.containsKey(arr[i])){ 
      newText += arr[i]; 
      i++; // skips the next character 
     } 
     if(i < arr.length - 1) 
      newText += "+"; 
    } 
    return newText; 
} 

不知道,因爲字符串不可變的,並調用「替換」只是在後臺創建一個新的字符串,我繼續爲您創建一個新的字符串,並在正確填充時返回結果。

讓我知道是否有我丟失的東西或其他未提及的限制。

相關問題