2013-09-25 3 views
-1

Мне нужно заменить все «\ n #» или «\ n \ r #» на «chr (35)» в некоторой строке, так что лучший способ сделать это учитывая проблемы с производительностью?Заменить некоторые символы из строки с точки зрения производительности

Я пробовал это, но я думаю, что это не очень хорошо !!!

public String encodeHash(String data){ 

    StringBuffer result = new StringBuffer(); 

    int numberOfReplacedChars = 0; 

    String hashPattern1 = "\n#" ; 
    String hashPattern2 = "\n\r#" ; 

    int index = data.indexOf(hashPattern1); 

    if(index != -1){ 
     numberOfReplacedChars = hashPattern1.length(); 
    }else{ 
     index = data.indexOf(hashPattern2); 
     if(index != -1){ 
      numberOfReplacedChars = hashPattern2.length() ; 
     }else{ 
      return data; 
     } 
    } 

    result.append(data.substring(0,index + (numberOfReplacedChars - 1))); 
    result.append("chr(35)"); 
    // method call itself (recursive) 
    result.append(encodeHash(data.substring(index + numberOfReplacedChars))); 

    return result.toString(); 
} 
+4

Вы вообще что-то пробовали решить это? – anubhava

+3

Какие проблемы с производительностью у вас есть? – Kayaman

+3

, пожалуйста, предоставьте «низкоэффективный» способ, который вы пробовали. –

ответ

2

Вы можете попробовать

str = str.replaceAll("\n\r?#", "chr(35)"); 

Если вы собираетесь делать эту операцию много, прекомпиляцию регулярное выражение, используя Pattern.

Трудно сказать, будет ли это работать лучше, чем два буквальных замещения, поэтому, если это действительно узкое место для вас, тогда вы должны указать оба варианта с некоторыми примерами строк. В большинстве случаев разница в производительности будет совершенно незначительной. Вот альтернатива:

str = str.replace("\n#", "chr(35)").replace("\n\r#", "chr(35)"); 
+0

Я думаю, что это самый быстрый способ. Наш Java-профессор сказал, что каждый раз, когда он пишет методы, существующие в java, стандартная реализация java быстрее, чем его ... – Kingalione

+0

@Kingalione Да, невероятная мысль зашла в тонкую настройку этих методов. – arshajii

+0

Да, я пробовал это раньше, но он не работает, я имею в виду, что он ничего не заменяет. – Salah

0

@arshajii ответ правильный. Но другой способ, который вы можете попробовать, - проверить каждый символ в строке и просто сделать StringBuilder # append.

Смежные вопросы