Коротше кажучи: strip()
це "розуміння Unicode" еволюції trim()
.
КСВ: JDK-8200378
Проблема
String :: обробка існує з ранніх днів Java, коли Unicode не повністю розвинувся до стандарту, який ми широко використовуємо сьогодні.
Визначення простору, що використовується String :: trim - це будь-яка точка коду, менша або рівна кодовій точці космосу (\ u0020), яку зазвичай називають ASCII або ISO контрольними символами.
Підпрограми обрізки, які знають Unicode, повинні використовувати символ :: isWhitespace (int).
Крім того, розробники не змогли спеціально видалити пробіл з відступом або спеціально вилучити пробіл.
Рішення
Введіть методи обрізки, які знають пробіл Unicode, і забезпечують додатковий контроль лише для провідних чи задніх.
Загальною характеристикою цих нових методів є те, що вони використовують інше (новіше) визначення поняття "пробіл", ніж старі методи, такі як String.trim()
. Баг JDK-8200373 .
У поточному обробці JavaDoc для String :: не зрозуміло, яке визначення поняття "пробіл" використовується в коді. Якщо в найближчому майбутньому з'являться додаткові способи обрізки, які використовують інше визначення простору, уточнення є обов'язковим. String :: trim використовує визначення простору як будь-якої кодової точки, яка менше або дорівнює кодовій точці символів пробілу (\ u0020.) Більш нові методи обрізки використовуватимуть визначення (білого) простору як будь-якої кодової точки, яка повертає істинне, коли передається в Символ :: присудокWhitespace.
Метод isWhitespace(char)
було додано до Character
JDK 1.1, але метод isWhitespace(int)
не був введений у Character
клас до JDK 1.5. Останній метод (той, що приймає параметр типу int
) був доданий для підтримки додаткових символів. Зауваження Javadoc для Character
класу визначають додаткові символи (як правило, змодельовані на основі коду "кодова точка") проти символів BMP (як правило, модельованих одним символом):
Набір символів від U + 0000 до U + FFFF іноді називають базовою багатомовною площиною (BMP). Символи, кодові точки яких перевищують U + FFFF, називаються додатковими символами. Платформа Java використовує представлення UTF-16 в масивах char та в класах String і StringBuffer. У цьому поданні додаткові символи представлені як пара знакових знаків ... Значення char, отже, являє собою кодові точки базової багатомовної площини (BMP), включаючи сурогатні кодові точки або кодові одиниці кодування UTF-16. Значення int представляє всі кодові точки Unicode, включаючи додаткові кодові точки. ... Методи, які приймають лише значення char, не можуть підтримувати додаткові символи. ... Методи, які приймають значення int, підтримують усі символи Unicode, включаючи додаткові символи.
Набір змін OpenJDK .
Порівняння порівняння між trim()
і strip()
- Чому String.strip () у 5 разів швидше, ніж String.trim () для порожнього рядка на Java 11