JavaScript bookmarklet и кодирование URL

Мне нравится идея StringTokenizer, потому что это является Счетным.
, Но это является также устаревшим, и замена String.split, которые возвращают скучную Строку [] (и не делает включает разделители).

, Таким образом, я реализовал StringTokenizerEx, который является Повторяемым, и который берет истинный regexp для разделения строки.

А истинный regexp означает, что это не 'Последовательность символов', повторенная для формирования разделителя:
'o' будет только соответствовать 'o' и разделять 'ooo' на три разделителя с двумя пустыми строками внутри:

[o], '', [o], '', [o]

, Но regexp o + возвратит ожидаемый результат при разделении "aooob"

[], 'a', [ooo], 'b', []

Для использования этого StringTokenizerEx:

final StringTokenizerEx aStringTokenizerEx = new StringTokenizerEx("boo:and:foo", "o+");
final String firstDelimiter = aStringTokenizerEx.getDelimiter();
for(String aString: aStringTokenizerEx )
{
    // uses the split String detected and memorized in 'aString'
    final nextDelimiter = aStringTokenizerEx.getDelimiter();
}

код этого класса доступен по телефону Отрывки DZone .

, Как обычно, для проблема кода ответ (один автономный класс с включенными тестовыми сценариями), вставка копии это (в 'src/test' каталоге) и выполняет его . Его основное () метод иллюстрирует различные использования.

Примечание: (в конце редактирования 2009 года)

Последние мысли статьи : Трудный вопрос Java: Крохоборствование делает хорошую работу, объясняя причудливое поведение в String.split().
Josh Bloch даже прокомментировал в ответ на ту статью:

Да, это - боль. FWIW, это было сделано на очень серьезном основании: совместимость с Perl.
парнем, который сделал это, является Mike "madbot" McCloskey, который теперь работает с нами в Google. Mike удостоверился, что регулярные выражения Java прошли фактически каждые из 30K тестов регулярного выражения Perl (и работал быстрее).

общая библиотека Google Гуава содержит также Разделитель, который является:

  • более простой использовать
  • сохраняемый Google (а не Вами)

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

JDK имеет это:

String[] pieces = "foo.bar".split("\\.");

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

Мини-трудный вопрос: ", a, b", .split ("") возвраты...

(a) "", "a", "", "b", ""
(b) null, "a", null, "b", null
(c) "a", null, "b"
(d) "a", "b"
(e) None of the above

Ответ: (e) Ни одно из вышеупомянутого.

",a,,b,".split(",")
returns
"", "a", "", "b"

Только запаздывающая порожняя тара пропускается! (Кто знает, что обходное решение предотвращает пропуск? Это - забавное...)

В любом случае, наш Разделитель просто более гибок: поведение по умолчанию упрощенно:

Splitter.on(',').split(" foo, ,bar, quux,")
--> [" foo", " ", "bar", " quux", ""]

, Если Вы хотите дополнительные функции, попросите их!

Splitter.on(',')
.trimResults()
.omitEmptyStrings()
.split(" foo, ,bar, quux,")
--> ["foo", "bar", "quux"]

Порядок методов конфигурации не имеет значения - во время разделения, обрезка происходит прежде, чем проверить на порожнюю тару.

5
задан Jake McGraw 27 October 2009 в 02:26
поделиться

1 ответ

Two Errors:

  1. You need to access the "href" member of the location object:

    window.location.href = http://foo.com

  2. You have invalid JavaScript:

    javascript:location = 'http://validator.w3.org/check?uri=' +escape(location)PLUS SIGN AND QUOTE MISSING HERE&doctype=Inline&charset=detect+automatically&ss=1&group=0&user-agent=W3C_Validator/1.654';

I recommend using this:

javascript:(function(){window.location.href='http://validator.w3.org/check?uri='+escape(window.location.href)+'&doctype=Inline&charset=detect+automatically&ss=1&group=0&user-agent=W3C_Validator/1.654';})()
5
ответ дан 14 December 2019 в 19:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: