Паттерны свойств Scala, поэтому вы можете посмотреть их, добавив их по одному:
new A
=> foo = "A"
with D
=> foo = "DA"
with C
, который складывается with B
=> foo = "CBDA"
with B
ничего не делает, потому что B
уже уложен в C
=> foo = "CBDA"
Вот сообщение в блоге о том, как Scala решает проблему наследования алмазов.
java.net. Класс URI может помочь; в документации URL Вы находите
Отметьте, класс URI действительно выполняет выход своих полей компонента при определенных обстоятельствах. Рекомендуемый способ справиться с кодированием и декодированием URL состоит в том, чтобы использовать URI
Используйте одного из конструкторов больше чем с одним аргументом, как:
URI uri = new URI(
"http",
"search.barnesandnoble.com",
"/booksearch/first book.pdf",
null);
URL url = uri.toURL();
//or String request = uri.toString();
(конструктор отдельного аргумента URI НЕ выходит из запрещенных символов),
Только запрещенных символов оставляет вышеупомянутый код - он НЕ выходит из символов неASCII (см. комментарий fatih).
toASCIIString
метод может использоваться для получения Строки только с символами US-ASCII:
URI uri = new URI(
"http",
"search.barnesandnoble.com",
"/booksearch/é",
null);
String request = uri.toASCIIString();
Для URL с запросом как http://www.google.com/ig/api?weather=São Paulo
, используйте версию с 5 параметрами конструктора:
URI uri = new URI(
"http",
"www.google.com",
"/ig/api",
"weather=São Paulo",
null);
String request = uri.toASCIIString();
URLEncoding может закодировать URL HTTP очень хорошо, поскольку Вы, к сожалению, обнаружили. Строка, в которой Вы передали, "http://search.barnesandnoble.com/booksearch/first book.pdf", был правильно и полностью закодирован в закодированную URL форму. Вы могли передать ту всю длинную строку напыщенности речи, которую Вы возвратили в качестве параметра в URL, и это могло декодироваться назад в точно строку, в которой Вы передали.
Это кажется, что Вы хотите сделать что-то немного различное, чем передача всего URL в качестве параметра. Из того, что я собираюсь, Вы пытаетесь создать поисковый URL, который похож на "http://search.barnesandnoble.com/booksearch/whateverTheUserPassesIn". Единственной вещью, которую необходимо закодировать, является бит "whateverTheUserPassesIn", поэтому возможно, все, что необходимо сделать, что-то вроде этого:
String url = "http://search.barnesandnoble.com/booksearch/" +
URLEncoder.encode(userInput,"UTF-8");
Это должно произвести что-то скорее более допустимое для Вас.
Мелочные придирки: строкой, содержащей пробельный символ по определению, не является URI. Таким образом, то, что Вы ищете, является кодом, который реализует выход URI, определенный в Разделе 2.1 из RFC 3986.
Да кодирование URL собирается закодировать ту строку так, чтобы это было бы передано правильно в URL конечному месту назначения. Например, у Вас не могло быть http://stackoverflow.com?url=http://yyy.com. UrlEncoding параметр зафиксировал бы то значение параметра.
Таким образом, у меня есть два варианта для Вас:
У Вас есть доступ к пути отдельным от домена? Раз так Вы можете только к UrlEncode путь. Однако, если дело обстоит не так затем опция 2 может быть для Вас.
Получите commons-httpclient-3.1. Это имеет класс URIUtil:
System.out.println (URIUtil.encodePath ("http://example.com/x y", "ISO-8859-1"));
Это произведет точно, что Вы ищете, поскольку это только закодирует часть пути URI.
К вашему сведению Вам будут нужны кодек свободного городского населения и вход свободного городского населения для этого метода для работы во времени выполнения.
я использую, это
org.apache.commons.text.StringEscapeUtils.escapeHtml4("my text % & < >");
добавляет этот dependecy
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.8</version>
</dependency>
Предупреждаем, что большинство ответов выше НЕПРАВИЛЬНЫ.
Класс URLEncoder
, несмотря на свое название, НЕ является тем, что должно быть здесь. Очень жаль, что Sun назвала этот класс так раздражающе. URLEncoder
предназначен для передачи данных в качестве параметров, а не для кодирования самого URL.
Другими словами, "http://search.barnesandnoble.com/booksearch/first book.pdf"
- это URL. Параметрами будут, например, "http://search.barnesandnoble.com/booksearch/first book.pdf?parameter1=this¶m2=that"
. Параметры - это то, для чего вы будете использовать URLEncoder
.
Следующие два примера демонстрируют различия между этими двумя методами.
Следующий пример выдает неправильные параметры в соответствии со стандартом HTTP. Обратите внимание, что амперсанд (&) и плюс (+) закодированы неверно.
uri = new URI("http", null, "www.google.com", 80,
"/help/me/book name+me/", "MY CRZY QUERY! +&+ :)", null);
// URI: http://www.google.com:80/help/me/book%20name+me/?MY%20CRZY%20QUERY!%20+&+%20:)
Ниже приведены правильные параметры, при этом запрос закодирован правильно. Обратите внимание на пробелы, амперсанды и знаки плюс.
uri = new URI("http", null, "www.google.com", 80, "/help/me/book name+me/", URLEncoder.encode("MY CRZY QUERY! +&+ :)", "UTF-8"), null);
// URI: http://www.google.com:80/help/me/book%20name+me/?MY+CRZY+QUERY%2521+%252B%2526%252B+%253A%2529