Удалить лишние пробелы и невидимые символы из строки, используя Java
У меня большой разговор, я занимаюсь им, так как между строкой есть много пробелов, которые также могут быть невидимыми, не являющимися словами. Ниже приведен пример строки:
public static void main(String[] args) {
String str = " TWD day count Spot 6-Sep / 2-Sep 2016 1W7d 13-Sep / 9-Sep 2016 1M30d 6-Oct / 4-Oct 2016 2M62d 7-Nov / 3-Nov 2016 3M91d 6-Dec / 2-Dec 2016 6M181d 6-Mar / 2-Mar 2017 9M273d 6-Jun / 2-Jun 2017 12M365d 6-Sep / 4-Sep 2017 18M546d 6-Mar / 2-Mar 2018 24M730d 6-Sep / 4-Sep 2018";
str = str.toString().replaceAll(" +", "");
System.out.println("str="+str.toString().trim().replaceAll(" ", ""));
}
Я пробовал много строковых функций для удаления пробелов, таких как trim()
, replaceAll(" ","")
, replaceAll("\\s","")
, replaceAll(" +","")
, replaceAll("\\s\\u00a0","")
, stringUtils.normalize()
Многие из них я пытался, но не работал, как ожидалось.
Я ожидаю выход, как показано ниже:
"String str =" TWD количество дней Спот 6 сентября 2016 года 1W7d 13 сентября 9 сентября 2016 года 1M30d 6 октября 4 апреля 2016 года 2M62d 7 ноября / 3 ноября 2016 года 3M91d 6 декабря 2016 года -Dec 2016 6M181d 6 марта / 2 марта 2017 года 9M273d "
Всего один пробел вместо длинных белых повторяющихся пробелов.
Пожалуйста помоги.
Нашел ответ как ниже:
System.out.println("str="+str.replaceAll("(?U)\\s+", " "));
3 ответа
Если в вашем тексте есть нестандартные пробелы, например символы из категорий Юникод:
- Разделитель, пробел, например
\u00A0
(NO-BREAK SPACE),\u2003
(EM SPACE),... - Разделитель, абзац, т.е.
\u2029
(ПАРАГРАФ СЕПАРАТОР) - Разделитель, Линия, т.е.
\u2028
(ЛИНИЙ СЕПАРАТОР)
использовать этот:
str = str.replaceAll("[\\s\\p{Z}]+", " ").trim();
где \s
соответствует пробельным символам ([ \t\n\x0B\f\r]
), а также \p{Z}
это сокращение для \p{Zs}\p{Zp}\p{Zl}
как указано выше.
Он в основном заменит все пробельные символы и символы- разделители на пробелы, сведет последовательные пробелы в один пробел и удалит начальные и конечные пробелы.
использоватьStringUtils.normalizeSpace(str);
Выход:
TWD day count Spot 6-Sep / 2-Sep 2016 1W7d 13-Sep / 9-Sep 2016 1M30d 6-Oct / 4-Oct 2016 2M62d 7-Nov / 3-Nov 2016 3M91d 6-Dec / 2-Dec 2016 6M181d 6-Mar / 2-Mar 2017 9M273d 6-Jun / 2-Jun 2017 12M365d 6-Sep / 4-Sep 2017 18M546d 6-Mar / 2-Mar 2018 24M730d 6-Sep / 4-Sep 2018
public static void main(String []args){
String str = " TWD day count Spot 6-Sep / 2-Sep 2016 1W7d 13-Sep / 9-Sep 2016 1M30d 6-Oct / 4-Oct 2016 2M62d 7-Nov / 3-Nov 2016 3M91d 6-Dec / 2-Dec 2016 6M181d 6-Mar / 2-Mar 2017 9M273d 6-Jun / 2-Jun 2017 12M365d 6-Sep / 4-Sep 2017 18M546d 6-Mar / 2-Mar 2018 24M730d 6-Sep / 4-Sep 2018";
str = str.replaceAll("\\s+", " ");
System.out.println(str);
}
Выход:
Подсчет дней TWD Спот 6 сентября / 2 сентября 2016 года 1W7d 13 сентября / 9 сентября 2016 года 1M30d 6 октября / 4 октября 2016 года 2M62d 7 ноября / 3 ноября 2016 года 3M91d 6 декабря / 2 декабря 2016 года 6M181d 6 -Март / 2 марта 2017 года 9M273d 6 июня / 2 июня 2017 года 12M365d 6 сентября 2014 года 18M546d 6 марта / 2 марта 2018 года 24M730d 6 сентября 2014 года