Как удалить символ ^M Java

Проблема:если строка заканчивается на \r, удалите \ r

Я начал с чего-то вроде этого

if (masterValue.endsWith(CARRIAGE_RETURN_STR)) {
  masterValue = masterValue.replace(CARRIAGE_RETURN_STR, "");
}

где

public static final String CARRIAGE_RETURN_STR = (Character.toString(Constants.CARRIAGE_RETURN));
public static final char CARRIAGE_RETURN = '\r';

Это кажется мне неловким.

Есть ли простой способ удалить символ \ r?

Затем я перешел к этому:

if (value.contains(CARRIAGE_RETURN_STR)) {
   value = value.substring(0, value.length()-3);

// - 3, потому что мы начинаем с 0 (1), строка заканчивается \n (2) и нам нужно удалить 1 символ (3)

Но это тоже кажется неловким.

Можете ли вы предложить более простое и элегантное решение?

2 ответа

Решение

Знаете, регулярные выражения могут поддерживать привязку конца строки. (См. Эту страницу Javadoc для получения дополнительной информации)

myString.replaceAll("\\r$", "");

Это также заботится об исправлении \r\n -> \n, я полагаю.

Я бы написал это так:

if (masterValue.endsWith("\r")) {
    masterValue = masterValue.substring(0, masterValue.length() - 1);
}

Я не вижу смысла в создании именованной константы для строки "\r".

Кстати, ваша вторая попытка неверна, потому что:

  1. String.contains("\r") говорит вам, если строка содержит возврат каретки, а не если она заканчивается возвратом каретки,
  2. второй аргумент String.substring(int, int) индекс конечного символа; то есть позиция первого символа, который НЕ должен быть в подстроке, и
  3. длина "\r" это один.
Другие вопросы по тегам