2015-06-05 3 views
0

Мне нужно закодировать только некоторые специальные символы в строке до числового значения. Say,Кодировать только определенные символы в String

String name = "test $#"; 

Я хочу, чтобы кодировать только символы $ и # в строке выше. Я попытался использовать код ниже, но это не сработало.

String encode = URLEncoder.encode(StringEscapeUtils.escapeJava(name), "UTF-8"); 

закодированное значение будет как для белого пространства кодированного значения &#160

+1

' ' - неразрывное пространство. Вы можете проверить: 'System.out.println (" nbsp: "+ name.equals (" test \ u00a0 $ # "));' –

+0

В этом случае ваше свободное пространство [неразрывное пространство] (http: // en.wikipedia.org/wiki/Non-breaking_space). – Phylogenesis

+0

Почему вы используете 'StringEscapeUtils.escapeJava'? – Jesper

ответ

0

насчет разделить эту строку (по строке # раздельного способом - с пространством, как регулярное выражение), из массива, который его возвращает вы можете использовать последний элемент, и вы получите там символы, что вам нужно :)

String name = "test $#"; 
String nameSplittedArr = name.split(" "); 
String yourChars = nameSplittedArr[nameSplittedArr.length-1]; //indexes from zero 

Это должно работает :)

+0

это просто пример .. специальные символы могут присутствовать где угодно в строке – AJJ

0

согласно комментариям, я думаю, вам re после настраиваемой функции кодирования. Что-то вроде:

public static String EncodeString(String text) { 
    StringBuffer sb = new StringBuffer(); 

    for (char c : text.toCharArray()) { 
     if (Character.isLetterOrDigit(c)) { 
      sb.append(c); 
     } else { 
      sb.append("&#" + (int)c + ";"); 
     } 
    } 

    return sb.toString(); 
} 

Примером этого является here.

+0

Спасибо за ответ. Я уже реализовал это так .. но лично я не хочу преобразовывать строку в массив символов и делать для цикла. Если у меня есть 100 символов в моей строке, цикл будет выполняться в течение 100 раз, что может вызвать проблемы с производительностью. Поэтому я хочу что-то вроде поиска и замены. – AJJ

+0

@AJJ Почему это обязательно приведет к проблемам с производительностью? Любая функция библиотеки (например, 'StringEscapeUtils.escapeJava()') будет реализована таким же образом за кулисами. Если вы хотите проверить все символы, вы обязательно должны будете проверять каждый символ по одному. – Phylogenesis

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