Подтвердить что ты не робот

Как обрезать пространство без пробелов в Java?

Я ввел входной файл, который мне нужно обработать, и отбросить все пробелы, включая неразрывное пространство U+00A0 aka   (его можно записать в блокнот, нажав Alt, а затем набрав 0 1 6 0 с цифровой клавиатуры.) или любой другой вид пробела. Я пробовал String.trim(), но он не обрезает U+00A0.

Нужно ли явно указывать для U+00A0, а затем trim() или есть простой способ обрезать все типы белых пробелов в Java?

4b9b3361

Ответ 1

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

string.replaceAll("(^\\h*)|(\\h*$)","")
  • \h является символом горизонтального пробела: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]

Если вы используете версию предварительного JDK8, вам нужно явно использовать список символов вместо \h.

Ответ 2

U+0160 не является пробелом, поэтому его нельзя обрезать. Но вы можете просто replace(), чтобы символы с пробелом, а затем вызывают trim(), поэтому вы сохраняете пробелы внутри строки.

string = string.replace('\u00A0',' ').trim()

Есть три неразрывных пробела, которые исключены из метода Character.isWhitespace(): \u00A0, \u2007 и \u202F, поэтому вы, вероятно, захотите их заменить.

Ответ 4

Если вы используете Apache Commons Lang, вы можете использовать strip и добавьте все нужные вам символы.

final String STRIPPED_CHARS = " \t\u00A0\u1680\u180e\u2000\u200a\u202f\u205f\u3000";

String s = "\u3000 \tThis str contains a non-breaking\u00A0space and a\ttab. ";
s = StringUtils.strip(s, STRIPPED_CHARS);  
System.out.println(s);  // Gives : "This str contains a non-breaking space and a    tab."