如何在Java中移除^M字符

3

问题: 如果字符串以 \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

你知道正则表达式可以支持字符串末尾定位吗?(详见此 Javadoc 页面

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

这也解决了\r\n --> \n的问题,我相信。

3
我会这样写:

我会这样写:

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

我认为创建一个名为"\r"的字符串常量没有任何意义。

顺便提一下,你的第二次尝试是错误的,因为:

  1. String.contains("\r") 只会告诉你这个字符串是否包含回车符,而不是以回车符结尾。
  2. String.substring(int, int) 的第二个参数是子字符串的结束字符的索引位置,也就是不应该在子字符串中出现的第一个字符的位置。
  3. "\r"的长度是1。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接