Как обрезать пространство без пробелов в Java?
Я ввел входной файл, который мне нужно обработать, и отбросить все пробелы, включая неразрывное пространство U+00A0
aka  
(его можно записать в блокнот, нажав Alt, а затем набрав 0 1 6 0 с цифровой клавиатуры.) или любой другой вид пробела. Я пробовал String.trim()
, но он не обрезает U+00A0
.
Нужно ли явно указывать для U+00A0
, а затем trim()
или есть простой способ обрезать все типы белых пробелов в Java?
Ответы
Ответ 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
, поэтому вы, вероятно, захотите их заменить.
Ответ 3
Вы можете сделать это с помощью CharMatcher
, например:
CharMatcher.anyOf("\r\n\t \u00A0").trimFrom(input);
CharMatcher.whitespace().trimFrom(input);
Смотрите также этот хороший справочник по определению пробелов
Ответ 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."