Ваш код имеет некоторую путаницу при обработке символов '{' и '}'. Это должно быть полностью параллельно тому, как вы обрабатываете '(' и ')'.
Этот код, слегка измененный по сравнению с вашим, похоже, работает правильно:
public static boolean isParenthesisMatch(String str) {
if (str.charAt(0) == '{')
return false;
Stack<Character> stack = new Stack<Character>();
char c;
for(int i=0; i < str.length(); i++) {
c = str.charAt(i);
if(c == '(')
stack.push(c);
else if(c == '{')
stack.push(c);
else if(c == ')')
if(stack.empty())
return false;
else if(stack.peek() == '(')
stack.pop();
else
return false;
else if(c == '}')
if(stack.empty())
return false;
else if(stack.peek() == '{')
stack.pop();
else
return false;
}
return stack.empty();
}
Хорошо, я думаю, я собираюсь использовать гибридный настраиваемый набор функций:
Кодировать : Используйте encodeURIComponent (), затем снова вставьте косую черту.
def unquote_url(url):
"""Decodes a URL that was encoded using quote_url.
Returns a unicode instance.
"""
return urllib.unquote(url).decode('utf-8')
Попробуйте регулярное выражение. Примерно так:
mystring.replace(/[\xFF-\xFFFF]/g, "%" + "$&".charCodeAt(0));
Это заменит любой символ выше порядкового номера 255 его соответствующим представлением% HEX.
Python: urllib.quote
Javascript: unescape
Я не проводил обширного тестирования, но для моих целей это работает большую часть времени. Полагаю, у вас есть какие-то конкретные символы, которые не работают. Возможно, если я использую какой-нибудь азиатский текст или что-то подобное, он сломается :)
Это появилось, когда я гуглил, поэтому я добавил это для всех остальных, если не специально для исходного вопроса.