У меня есть строка, которая я хотел бы удалить конец символов строки от самого конца строки только с помощью Java
"foo\r\nbar\r\nhello\r\nworld\r\n"
которым я хотел бы стать
"foo\r\nbar\r\nhello\r\nworld"
(Этот вопрос подобен, но не то же как вопрос 593671),
Вы можете использовать s = s.replaceAll("[\r\n]+$", "");
. Это обрезает \r
и \n
символы в конце строки
Regex объясняется следующим образом:
[\r\n]
- класс символов, содержащий \r
и \n
+
- одно или более повторений$
- якорь конца строкиВы также можете использовать String. trim()
для удаления любых пробельных символов из начала и конца строки:
s = s.trim();
Если вам нужно проверить, содержит ли строка
только пробельные символы, вы можете проверить, является ли она isEmpty()
после trim()
:
if (s.trim().isEmpty()) {
//...
}
Также вы можете проверить, совпадает ли она matches("\\\s*")
, т.е.. т.е. ноль или больше символов пробела. Обратите внимание, что в Java, regex matches
пытается найти всю строку. Во вкусах, которые могут соответствовать подстроке, вам нужно поставить шаблон на якорь, так что это ^\s*$
.
Не подойдет ли здесь String.trim?
т.е. вы вызовете метод .trim()
для вашей строки, и он вернет копию этой строки за вычетом пробелов.
Язык Apache Commons StringUtils.stripEnd (String str, String stripChars)
подойдет; например
String trimmed = StringUtils.stripEnd(someString, "\n\r");
Если вы хотите удалить все пробелы в конце строки:
String trimmed = StringUtils.stripEnd(someString, null);
Что ж, все дали какой-то способ сделать это с помощью регулярного выражения, поэтому я дам вместо этого самый быстрый способ:
public String replace(String val) {
for (int i=val.length()-1;i>=0;i--) {
char c = val.charAt(i);
if (c != '\n' && c != '\r') {
return val.substring(0, i+1);
}
}
return "";
}
Benchmark говорит, что он работает ~ в 45 раз быстрее, чем решения с регулярным выражением.
String text = "foo\r\nbar\r\nhello\r\nworld\r\n";
String result = text.replaceAll("[\r\n]+$", "");
"foo\r\nbar\r\nhello\r\nworld\r\n".replaceAll("\\s+$", "") or "foo\r\nbar\r\nhello\r\nworld\r\n".replaceAll("[\r\n]+$", "")
Если у вас есть библиотеки guava Google в вашем проекте (если нет, возможно, вам следует!), Вы должны сделать это с помощью CharMatcher :
String result = CharMatcher.any("\r\n").trimTrailingFrom(input);