Символ неразрывного пробела java

jsoup / Java — как добавить неразрывный пробел

Вызов [Element].appendtext(» «) приводит к экранированию амперсанда, и пользователь видит амперсанд на отображаемой HTML-странице. Я не хочу, чтобы страница отображала HTML-код.

Я действительно хочу, чтобы html-страница отображала пробелы.

2 ответа

Неразрывный пробел можно записать в строковый литерал с помощью escape-последовательности Unicode: «\u00A0» .

Однако, если вы хотите, чтобы все пробелы внутри элемента отображались буквально, рассмотрите возможность использования обычных пробелов, но применяя свойство CSS, такое как white-space: pre; .

Существует библиотека с открытым исходным кодом под названием MgntUtils, которая имеет функцию, которая принимает обычную строку и создает строку для формата Html, в которой будет сохранено форматирование строки. Т.е. все пробелы в строке будут заменены неразрывными пробелами, а все новые строки будут заменены тегами ‘br’. Преимущество в том, что если вы просто напечатаете строку как текст, не тормозящие пробелы, это будет выглядеть как обычное пространство, а не как «\u00A0» или побег nbsp. Вы, конечно, увидите теги br, но все же ваша строка будет выглядеть гораздо более читаемой. Вот JavaDoc для метода. Иногда мне это казалось очень удобным. Код просто выглядел бы

String htmlFormattedStr = formatStringToPreserveIndentationForHtml(rawText); 

Артефакты библиотеки Maven можно найти здесь, а саму библиотеку в виде файла Jar, а также исходный код и JavaDoc можно найти на Github. Вот ссылка на статью о библиотеке

Источник

Почему неразрывный пробел не является пробельным символом в Java?

При поиске подходящего способа обрезать неразрывное пространство из разобранного HTML я впервые наткнулся на java spartan definition String.trim() , который, по крайней мере, правильно документирован. Я хотел, чтобы явным образом не перечислял символы, подходящие для обрезки, поэтому я предположил, что использование поддерживаемых Unicode методов в классе Character выполнит эту работу для меня. Что, когда я обнаружил, что Character.isWhitespace(char) явно исключает неразрывные пробелы:

Это символ пробела Unicode ( SPACE_SEPARATOR , LINE_SEPARATOR или PARAGRAPH_SEPARATOR ) , но также не является неразрывным пробелом ( ‘\u00A0’ , ‘\u2007’ , ‘\u202F’ ).

7 ответов

Character.isWhitespace(char) является старым. Действительно старый. Многие вещи, сделанные в первые дни Java, соответствовали соглашениям и реализациям с C. Теперь, более десятилетия спустя, эти вещи кажутся ошибочными. Подумайте, как это произошло, даже в первые дни работы Java и первых дней .NET. Java стремится к 100% обратной совместимости. Поэтому даже если бы команда Java подумала, что было бы неплохо исправить свою первоначальную ошибку и добавить неразрывные пробелы в набор символов, возвращающий true из Character.isWhitespace(char), они не могут, потому что почти наверняка существует программное обеспечение, которое опирается на текущую реализацию, работающую точно так, как она делает.

Читайте также:  Обход капчи python selenium

Что касается обратной совместимости: я согласен, но нет никаких причин, почему бы не добавить, скажем, Character.isWhitespaceNew (char) для захвата текущей ситуации.

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

@Jirka хорошо, они добавили его, за исключением того, что он называется Character.isSpaceChar (char); это не включает разрывы строк, хотя

Так как Java 5 также существует isSpaceChar(int) . Разве это не делает то, что вы хотите?

Определяет, является ли указанный символ (кодовая точка Юникода) символом пробела в Юникоде. Символ считается символом пробела тогда и только тогда, когда он задан как символ пробела по стандарту Unicode. Этот метод возвращает true, если тип общей категории символов является одним из следующих.

Дело не в существовании такого метода, который искал ФП; скорее это функция типа trim которая использует этот метод, чтобы определить, что нужно удалить.

Как указано выше, isSpaceChar(int) предоставит OP дорожку для ответа. Это выглядит довольно осторожно документированным, но этот метод фактически используется с регулярными выражениями. Итак:

создаст строку «X_X_X». В качестве упражнения для читателя остается придумать регулярное выражение, чтобы обрезать строку. (Шаблон с некоторыми флагами должен сделать трюк.)

@zendu — это, хотя и не очень заметно: 1) docs.oracle.com/javase/7/docs/api/java/util/regex/… :> Категории, которые ведут себя как методы логического ismethoname имени java.lang.Character ( кроме устаревших) доступны через тот же синтаксис \ p , где указанное свойство имеет имя javamethodname. 2) docs.oracle.com/javase/7/docs/api/java/lang/…

Я бы сказал, что реализация Java более корректна, чем .NET. Неразрывное пространство по существу является не-пробельным символом, который выглядит как один. То есть, если у вас есть строки «foo» и «bar», и между ними помещается любой традиционный символ пробела, вы получите слово break. Неразрывное пространство, однако, не разбивает два.

Неразрывный пробел все еще является границей слова. «Разрыв» в «неразрывном пробеле» относится к тому, как его следует интерпретировать для разрыва строки , а не для переноса слов.

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

Для всех других целей, включая подсчет слов, обрезку и разделение общего назначения по границам слов, неразрывное пространство по-прежнему является пробелом.

Любой аргумент, что неразрывное пространство просто «похоже» на пробел, но не конфликтует со всей точкой Unicode, которая представляет символы на основе их значения, а не как они отображаются.

Таким образом, IMHO, реализация Java String.trim() не выполняется так, как ожидалось, и основная функция Character.isWhitespace() не работает.

Читайте также:  Python tkinter событие закрытия окна

Моя догадка заключается в том, что разработчики Java написали isWhitespace() на основе необходимости выполнять перенос текста в элементах управления. Они должны были назвать эту функцию isWordWrappingBoundary() или что-то более понятное и использовали менее ограничивающий пробельный тест для trim().

String.trim () еще более сломан, чем это. Он просто обрезает управляющие символы ASCII, и никаких пробелов в Юникоде вообще, ломается или нет.

Также будьте осторожны при использовании функции apache commons StringUtils.isBlank() (и связанных функций), которая имеет тот же странный isWhitespace, то есть неразрывное пространство считается непустым.

Похоже, что имя метода ( isWhitespace ) не соответствует его функции (для обнаружения разделителей). Функциональность «разделитель» довольно понятна, если вы посмотрите полный список символов со страницы Javadoc, которую вы цитировали:

* It is a Unicode space character (SPACE_SEPARATOR, LINE_SEPARATOR, or PARAGRAPH_SEPARATOR) but is not also a non-breaking space ('\u00A0', '\u2007', '\u202F'). * It is '\u0009', HORIZONTAL TABULATION. * It is '\u000A', LINE FEED. * It is '\u000B', VERTICAL TABULATION. * It is '\u000C', FORM FEED. * It is '\u000D', CARRIAGE RETURN. * It is '\u001C', FILE SEPARATOR. * It is '\u001D', GROUP SEPARATOR. * It is '\u001E', RECORD SEPARATOR. * It is '\u001F', UNIT SEPARATOR. 

Неразрывная пространственная функция должна быть визуальным пространством между словами, которые не разделены алгоритмами переноса.

Ещё вопросы

  • 0 Пошагово прочитайте файл и положите в БД. Не дает ошибок, но не вводит данные полностью или правильно
  • 0 Получить параметр URL на контроллере Spring из приложения Angular
  • 0 Предотвращение дублирования инициализации асинхронных служб в Angular.js
  • 0 Панель обновления мешает работать jquery?
  • 0 -webkit-transform проблемы с производительностью в Chrome
  • 0 SDL_Surface отказывается от блиц
  • 0 Как отключить гиперссылку в зависимости от условий в кендо?
  • 1 Подсчитать количество совпадающих событий
  • 0 Динамически добавленный атрибут управления отображается как «элементы управления =» вместо элементов управления
  • 0 Могу ли я передавать обработанный видеовыход из OpenCV на ПК на планшет с Android?
  • 0 выбрать элемент окна выбора по номеру элемента в jQuery
  • 0 Получить счетчик записей из SQL и передать его в XML с помощью PHP
  • 1 Удалить строку из файла с пустыми полями, используя Python
  • 0 Директива в шаблоне другой директивы
  • 1 сканировать список сайтов один за другим с помощью scrapy
  • 1 Объедините кучу разных данных в одну группу с несколькими столбцами
  • 1 Как я могу убедиться, что функция запускается ПОСЛЕ функции, которая вызывает ее, завершена?
  • 0 Изменить .htaccess на работу? _Escaped_fragment_ = URL
  • 0 Как использовать указатели на функции для инициализации объекта внутри класса?
  • 0 Отображать окно на странице HTML, используя внешний Javascript?
  • 1 Недоразумение с задачей, асинхронным ожиданием, примером с SendRequestAsync
  • 0 Убрать пробел между строкой таблицы
  • 0 jquery удалить содержимое последнего тд
  • 0 Двоичное дерево не вставляется
  • 1 Отправить пользовательскую матрицу и пользовательское измерение для аналитики Firebase
  • 1 Попросите alarmManager не отображать время и значок будильника на экране и сверху
  • 1 Постоянный мост между компонентом React VR и собственным кодом модуля
  • 0 Как я могу добавить текст в «$ cordovaLocalNotification.schedule» для нескольких локальных уведомлений ngCordova динамически?
  • 0 когда-нибудь MySQL отключен, из-за увеличения нагрузки посетителя
  • 0 Языковой стандарт PHP с помощью mktime
  • 0 получить идентификатор из ng-repeat
  • 1 чтение карт и добавление очков
  • 0 как группировать столбцы mysql с условиями
  • 0 Html.toHtml () не конвертирует текст RelativeSizeSpan ‘ed
  • 0 AngularJs внедряет html-элемент в оболочку из дочернего представления из разметки
  • 1 Размер настраиваемого диалогового окна с изменениями анимации
  • 1 [Python Falcon]: gunicorn работает в терминале, но не в PyCharm
  • 1 Папка Temp в устройствах Pixel 2
  • 1 Назначение и вызов свойств объекта внутри другого объекта
  • 0 Странные символы распечатаны для UDP
  • 1 Захват сообщения окна и затем запуск кода
  • 1 JavaScript тасует колоду, поэтому нет трех одинаковых костюмов
  • 0 всплывающее окно больше не блокируется
  • 1 Процентильная функция Python
  • 1 как добавить ограничения в форму входа?
  • 0 Бит манипуляции тильда
  • 0 Добавление коробки количества к списку товаров magento
  • 0 Как передать вектор объектов в другой класс, а затем вызвать функцию внутри члена объекта в этом векторе?
  • 1 Как проверить, что одно из многих условий выполнено на Мокито? Можно ли проверить, был ли вызван один ИЛИ другой метод?
  • 0 Ссылаясь на корневой каталог
Читайте также:  How to uninstall all java

Источник

jsoup / Java — как добавить неразрывный пробел

Вызов [Element] .appendtext («») приводит к экранированию амперсанда, и пользователь видит амперсанд на отображаемой HTML-странице. Я не хочу, чтобы страница отображала HTML-код.

Я действительно хочу, чтобы HTML-страница отображала пробелы.

2 ответа

Неразрывный пробел может быть записан в строковый литерал с помощью escape-последовательности Unicode: «\u00A0» .

Однако, если вы хотите, чтобы все пробелы в элементе отображались буквально, рассмотрите возможность использования обычных пробелов, но с применением свойства CSS, такого как white-space: pre; .

Существует библиотека с открытым исходным кодом под названием MgntUtils, которая имеет функцию, которая принимает обычную строку и создает формат строки для HTML, где форматирование строки будет сохранено. То есть все пробелы в строке будут заменены неразрывными пробелами, а все новые строки будут заменены тегами ‘br’. Преимущество заключается в том, что если вы просто напечатаете свою строку в виде текста, то не-тормозные пробелы будут выглядеть как обычные пробелы, а не как «\ u00A0» или escape. Вы, конечно, увидите теги br, но, тем не менее, ваша строка будет выглядеть гораздо более читабельной. Вот JavaDoc a> для метода. Я нашел это иногда очень удобным. Код будет просто выглядеть

String htmlFormattedStr = formatStringToPreserveIndentationForHtml(rawText); 

Библиотечные артефакты Maven можно найти здесь и саму библиотеку в виде файла Jar, а также исходный код и JavaDoc можно найти на Github . Вот ссылка на статью о библиотеке

Источник

Оцените статью