【问题标题】:Replace '\n' by ',' in java在java中用','替换'\ n'
【发布时间】:2017-07-23 04:44:56
【问题描述】:

我想将用户输入为String 并将换行符\n 替换为,

我试过了:

String test ="s1\ns2\ns3\ns4"; System.out.println(test.replaceAll("\n",","));

输出为 s1,s2,s3,s4

但是当我通过从 UI 获取输入来尝试相同的代码时,它不起作用。

当我调试它时,字符串 test(我硬编码)被视为,

s1

s2

s3

s4

但 UI 中的字符串是“s1\ns2\ns3\ns4”。

请提出问题所在。

【问题讨论】:

  • 试试System.out.println(test.replaceAll("\n",",").replaceAll("\r\n",","));
  • "从 UI 获取输入" - 显示从 UI 获取输入的代码。显然,无论读取什么都不会解释转义码并将文字 \n 留在字符串中。您可能需要自己解释转义序列

标签: java string replace replaceall


【解决方案1】:

\n 是换行符。如果你需要用n替换那个实际的反斜杠字符,那么你需要使用这个:

String test ="s1\ns2\ns3\ns4";
System.out.println(test.replaceAll("\\n",","));

更新:

您可以使用System.lineSeparator(); 代替\n 字符。

System.out.println(test.replaceAll(System.lineSeparator(),","));

【讨论】:

  • 当我将字符串作为硬编码的字符串时,这工作正常。但是当我通过 textarea 从用户那里获取字符串时,它不起作用
  • 当您通过 textArea 从用户处获取时,请检查该字符串的值。
  • 不要使用 \n 而是使用 docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 中定义的行分隔符
  • 您可以使用System.lineSeparator(); 代替\n 字符。
  • 我认为为了让System.lineSeparator() 工作,正则表达式字符串必须像正则表达式一样格式化。所以像replaceAll("[" + System.lineSeparator() + "]+")。这是我可以让它在我的设备上运行的唯一方法。
【解决方案2】:

正如 anacron 已经指出的那样,'\n' 是一个特殊字符,与用户输入“\n”不同,因为用户输入被转换为“\\n”。

用户输入后的 Java 字符串如下所示

String test ="s1\\ns2\\ns3\\ns4";

不喜欢你的测试字符串

String test ="s1\ns2\ns3\ns4";

用户输入单个字符,键盘'\'转换为Java字符'\\'。

【讨论】:

  • 在这种情况下如何替换 \\n?
  • @sony System.out.println(test.replaceAll("\\n",","));
  • 谢谢你.. @Markus
【解决方案3】:

java.util.regex.Pattern documentation 指定行终止符为:

行终止符是一个或两个字符的序列,用于标记 输入字符序列的行尾。以下是 识别为行终止符:

换行符(换行符)('\n'), 一个回车符,后跟一个换行符(“\r\n”), 一个独立的回车符('\r'), 下一行字符 ('\u0085'), 行分隔符 ('\u2028'),或 段落分隔符 ('\u2029)。

来自 textarea 的行终止符是 \r\n (CR/LF)。

正则表达式是[\r\n]+

【讨论】:

    【解决方案4】:

    使用Regex:

    public class Program
    {
        public static void main(String[] args) {
            String str = "s1\ns2\ns3\ns4";
            str = str.replaceAll("(\r\n|\n)", ",");
            System.out.println(str);
        }
    }
    

    输出:s1,s2,s3,s4

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 2017-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 2019-09-19
      • 1970-01-01
      • 2014-08-25
      相关资源
      最近更新 更多