Как удалить символ ^ M Java - PullRequest
3 голосов
/ 24 июня 2010

Проблема: Если строка заканчивается на \ 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 ]

9 голосов
/ 24 июня 2010
Вы знаете, что регулярные выражения могут поддерживать привязку конца строки. (См. эту страницу Javadoc для получения дополнительной информации)
myString.replaceAll("\\r$", "");

Это также помогает исправить \ r \ n -> \ n, я думаю.

3 голосов
/ 24 июня 2010

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

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

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

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

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