Как представить узкие неразрывные пробелы в HTML для Windows?

Ваш потоковый вызов (логически) выполняет то же самое, что:

for (K k : someMap.keySet()) {
    if (!someList.contains(k)) {
        someMap.remove(k);
    }
}

Если вы запустите это, вы обнаружите, что он выбрасывает ConcurrentModificationException, потому что он изменяет карту в то же время, что и вы повторяете его. Если вы посмотрите на docs , вы заметите следующее:

Обратите внимание, что это исключение не всегда указывает, что объект был одновременно изменен другой поток. Если один поток выдает последовательность вызовов методов, которые нарушают договор объекта, объект может выдать это исключение. Например, если поток изменяет коллекцию напрямую, когда он выполняет итерацию по коллекции с быстрым итератором, итератор выкинет это исключение.

blockquote>

Это то, что вы делаете, реализация карты, которую вы используете, очевидно, имеет неудачные итераторы, поэтому это исключение бросается.

Одна из возможных альтернатив для удаления элементов с помощью итератора напрямую:

for (Iterator ks = someMap.keySet().iterator(); ks.hasNext(); ) {
    K next = ks.next();
    if (!someList.contains(k)) {
        ks.remove();
    }
}

29
задан FroMage 27 February 2009 в 16:10
поделиться

4 ответа

Хммм ... нет. Если единственная проблема заключается в том, что & thinsp; (U + 2009) все еще не работает, я предпочитаю использовать:

<span style="white-space:nowrap">&thinsp;</span>

, чтобы исправить поведение нарушения. Почему?

  • Потому что французский штраф фактически использует почти фиксированную ширину от одной шестой до одной четвертой кадратина (примерно 0,166–0,25 примерно при стандартном пространстве 0,5 примерно). выбор ширины зависит от подхода, уже присутствующего в глифах, определенных в данном шрифте.

  • Шрифты предназначены для регулировки ширины их тонкого пространства (U + 2009): если эти шрифты были созданы французскими типографами (для визуализации Французский), подход (или промежутки между буквами в словах) уже, чем в шрифтах, разработанных для английского языка: это связано с тем, что французские тексты обычно содержат больше букв, чем эквивалентные английские тексты (например, печатная Библия), и, чтобы избежать увеличения количества печатных страниц, глифы во французских шрифтах были сделаны немного более узкими и с сокращенным подходом; чтобы компенсировать это сокращение, размер французского штрафа был увеличен. (Часто говорят, что U + 2009 составляет одну пятую кадратина, т.е. примерно 0,2, но это неверно, так как это значение является разумным медианным значением, которое должно эффективно корректироваться в шрифтах в соответствии с их дизайном).

  • В английском языке с английской типографикой межсимвольные промежутки уже достаточно велики, чтобы оправдать тот факт, что в текстах около большинства двойных знаков препинания не используется тонкое пространство. Однако, но это явно не так.

    ВСЕ браузеры ДОЛЖНЫ рассматривать U + 202F как неразрывный (это уже так, даже если они не знают символ во внутренней копии UCD).

    Однако браузеры НЕ ДОЛЖНЫ зависеть от того факта, что U + 202F определено в шрифте, вместо этого они ДОЛЖНЫ предоставлять откат к U + 2009 (THIN SPACE) при его рендеринге, каждый раз, когда U + 202F не отображается в текущем шрифте. , но U + 2009 отображается в том же шрифте (это обычно бывает со многими шрифтами).

    Так что это проблема в средствах визуализации HTML (т.е. браузерах); Я также думаю, что это больше, чем проблема шрифтов, это действительно ОШИБКА браузеров (а не ошибка или ограничение в шрифтах), если они не предоставляют такие резервные варианты для пробелов. Конечно, все новые шрифты должны сопоставлять U + 202F с тем же глифом, что и U + 2009.

    Учитывая, что тонкое пространство (U + 2009, или & thinsp; ) очень хорошо поддерживается многими шрифтами и имеет правильную ширину для рендеринга французских текстов со шрифтами, сделанными с французскими типографскими метриками, или для рендеринг английских текстов, созданных с использованием английских типографских метрик, это действительно должна быть правильная альтернатива для использования каждый раз, когда узкое неразрывное пространство недоступно!

    Вы можете идеально имитировать желаемое поведение U + 202F в HTML, просто используя U + 2009 и сделать его неразрывным с помощью CSS "white-space: nowrap". Это всегда будет лучше, чем изменение font-size для отображения псевдополупространства (потому что это неверно для многих шрифтов, для которых он все еще будет слишком большим, а также потому, что это не работает должным образом в промежутках текста, которые иметь цветной фон: изменение размера шрифта изменяет высоту строки).

    Поэтому, пожалуйста, используйте этот код вместо этого в своих документах HTML или SVG (сохраняйте U + 202F только для текстовых документов):

    <span style="white-space:nowrap">&thinsp;</span>

    Вы можете сохранить эту последовательность в многоразовый шаблон, который вы можете назвать Шаблон: nnbsp в MediaWiki, например, для включения его на свои страницы как {{nnbsp}} .

    Обратите внимание, что он по-прежнему предпочтительнее ссылаться на тонкое пространство символически как & thinsp; вместо того, чтобы принудительно указывать точную кодовую точку Unicode, например & # x2009; : названный объект может быть переназначен средством визуализации или в соответствии с предпочтениями пользователя еще один рабочий пробел.

    Обратите внимание, что MS-word действительно использует U + 2009, а не U + 202F для представления своего собственного штрафа . Это правильно, учитывая, что документы Word имеют предварительно вычисленный макет, и учитывая, что MS-Word обеспечивает локально неразрывное поведение при вычислении макета страницы. Документы Word не являются текстовыми документами.

    • Пример визуализации (с использованием цветов фона, чтобы показать, что высота строки не изменяется, но, к сожалению, этот сайт не позволяет устанавливать цвета фона, кроме ], как здесь, в которых используются моноширинные шрифты):

    Exemple de «fine» insécable française correctement codée!

    • То же без контейнера не отображается цвет фона, но он использует нормальные пропорциональные шрифты, так что тонкое пространство эффективно отображается как тонкое:

    Exemple de «fine» insécable française; код исправления!

    • Пример использования & # x202F; (NNBSP, который обычно не поддерживается большинством шрифтов, но со временем может работать с вашим текущим браузером и шрифтами, установленными в вашей системе, например DejaVu Sans ):

    Exemple de «fine »Безупречный французский язык; код исправления!

    • Пример использования & # x2006; (SIXTH OF CADRATIN, может работать, но может быть слишком узким для ваших шрифтов и может не демонстрировать свойство неразрывности):

    Exemple de «Прекрасный» непонятный французский; Код исправления! (хммм ... не совсем)

    • Пример использования & nbsp; (который почти всегда слишком велик):

    Exemple de «штраф» непонятного французского; Код исправления! (хм ... не совсем)

    такие как DejaVu Sans ):

Exemple de «штраф» непонятного французского языка; код исправления!

  • Пример использования & # x2006; (SIXTH OF CADRATIN, может работать, но может быть слишком узким для ваших шрифтов и может не демонстрировать свойство неразрывности):

Exemple de «Прекрасный» непонятный французский; Код исправления! (хммм ... не совсем)

  • Пример использования & nbsp; (который почти всегда слишком велик):

Exemple de «штраф» непонятного французского; Код исправления! (хм ... не совсем)

такие как DejaVu Sans ):

Exemple de «штраф» непонятного французского языка; код исправления!

  • Пример использования & # x2006; (SIXTH OF CADRATIN, может работать, но может быть слишком узким для ваших шрифтов и может не демонстрировать свойство неразрывности):

Exemple de «Прекрасный» непонятный французский; код исправления! (хммм ... не совсем)

  • Пример использования & nbsp; (который почти всегда слишком велик):

Exemple de «штраф» на непонятном французском языке; Код исправления! (хм ... не совсем)

Exemple de «штраф» на непокорном французском языке; Код исправления! (хммм ... не совсем)

  • Пример использования & nbsp; (который почти всегда слишком велик):

Exemple de «штраф» непонятного французского; Код исправления! (хм ... не совсем)

Exemple de «штраф» на непокорном французском языке; код исправления! (хммм ... не совсем)

  • Пример использования & nbsp; (который почти всегда слишком велик):

Exemple de «штраф» на непонятном французском языке; Код исправления! (хм ... не совсем)

59
ответ дан 28 November 2019 в 01:17
поделиться

Почему не всего &#x202F;?

1
ответ дан Gumbo 14 October 2019 в 07:45
поделиться

Вы могли сделать это, но это не идеально.

<span style="font-size:50%;"> </span>
0
ответ дан Rich 14 October 2019 в 07:45
поделиться

Я сделал немного больше рытья, и оно действительно походит на проблему шрифта. FileFormatInfo очень полезен для того, чтобы заниматься проблемами Unicode в целом, и он включает страница , перечисляющая шрифты, которые поддерживают этот конкретный символ . Существует даже инструмент Flash (нажмите в синем поле на странице, перечисляющей поддерживаемые шрифты для получения до него - я не могу сделать корректный URL по некоторым причинам), который перечисляет все локально установленные шрифты и показывает этот символ для каждого.

3
ответ дан Rich 14 October 2019 в 07:45
поделиться
Другие вопросы по тегам:

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