Укоротить строку - PullRequest
       1

Укоротить строку

0 голосов
/ 12 февраля 2010

Есть ли лучший способ сократить (использовать меньше символов) строку в java, кроме преобразования символов в int и запуска их через base36?

Например, скажите, хочу ли я сократить URL.

Ответы [ 3 ]

4 голосов
/ 12 февраля 2010

Службы коротких URL-адресов (например, tinyurl) работают, сохраняя большую таблицу базы данных, которая отображается из коротких URL-адресов в их полную форму.

Когда вы запрашиваете tinyurl, служба выделяет случайный короткий URL-адрес (который в данный момент не используется) и создает в своей таблице запись, которая отображает короткий URL-адрес на предоставленный вами более длинный.

Когда вы пытаетесь загрузить короткий URL-адрес в браузер, запрос сначала направляется в сервис tinyURL, который ищет полный URL-адрес, а затем отправляет HTTP-ответ перенаправления в браузер, сообщая ему перейти на реальный URL-адрес. 1005 *

Вы можете реализовать свою собственную службу сокращения URL-адресов, выполнив то же самое, хотя, если вы сокращаете свои собственные URL-адреса, вы можете выполнить внутреннее перенаправление на ваш веб-сервер; например используя фильтр запроса сервлета.


Я описал выше в контексте сокращения URL-адресов таким образом, что позволяет разрешать URL-адреса 1 . Но этот подход также может быть использован более широко; то есть путем создания пары Map<String,String> объектов и заполнения ее двунаправленными сопоставлениями между последовательно генерируемыми короткими строками и исходными (возможно, более длинными) строками. Можно доказать , что даст меньший средний размер короткой строки, чем любая алгоритмическая схема сжатия или кодирования для того же набора длинных строк.

Недостатком является пространство, необходимое для хранения сопоставлений, и тот факт, что вам нужны сопоставления в любом месте (например, на любом компьютере), где вам нужно выполнять преобразование между коротким и длинным или длинным в короткое.

1 - Когда вы думаете об этом, это важно. Если вы укоротите строку URL-адреса, и результат больше не будет разрешаться, то в большинстве случаев он не будет полезен.

2 голосов
/ 12 февраля 2010

Поскольку URL-адреса имеют UTF-8 и, следовательно, символы являются основанием 256, кодирование тех же символов, что и целых кодовых точек в базе 32, может только сделать их длиннее. Или ты не спрашиваешь, как это звучит?

Кроме того, в Java строки являются основой 65536 UTF-16, поэтому кодирование их кодовых точек в качестве базы 32 сделает строки Java еще длиннее.

Так же, как кодирование двоичных данных в базе 64 увеличивает их на 4/3 - каждые 3 байта требуется 4 базовых 64 байта для кодирования.

0 голосов
/ 12 февраля 2010

Поместите полные URL-адреса в базу данных и укажите идентификатор в качестве URL-адреса перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...