替换字符串Java中的子字符串

时间:2014-07-14 12:17:24

标签: java string

我正在尝试替换字符串中的多个子字符串,例如我有以下字符串wordlist

one    two    three

我想用\t个新行字符替换\r\n标签字符。

我将separator变量定义为\n,将replacement变量定义为\r\n

然后我使用wordlist = wordlist.replaceAll(separator, replacement);替换所有字符,但当我再次显示wordlist时,它会给我以下结果

onerntwornthree

我还尝试将wordlist由子串separator拆分为一个数组,然后将其逐字连接到一个由replacement分隔的新字符串中,但之后它只是给了它我的结果是

one\r\ntwo\r\nthree

有人知道如何解决这个问题吗?如果您需要它,这是完整的代码:

System.out.print("Separator to replace: ");
separator = scanner.next( );

System.out.print("Replacement for separator: ");
replacement = scanner.next( );

wordlist = wordlist.replaceAll(separator, replacement);

3 个答案:

答案 0 :(得分:3)

标签的输入字符似乎不正确。

此代码提供

    String wordlist="one    two three";
    wordlist = wordlist.replaceAll("\t", "\r\n");
    System.out.println(wordlist);

此输出 -

one
two
three

答案 1 :(得分:0)

为什么要将分隔符设置为\n ?,我应该\t

以下代码适用于jdoodle

String s = "one\ttwo\tthree";
s = s.replaceAll("\t","\r\n");
System.out.println(s);

修改

这不起作用的原因是因为您向用户查询分隔符,当他输入\t时,这是一个包含第一个字符\和第二个t的字符串而不是转义字符。

您应首先使用StringEscapeUtils.unescapeJava

因此:

Scanner sc = new Scanner(System.in);
String separator = sc.nextLine();
separator = StringEscapeUtils.unescapeJava(separator);
String s = "one\ttwo\tthree";
s = s.replaceAll(separator,"\r\n");
System.out.println(s);

如果org.apache.commons.lang.StringEscapeUtils不可用,您可以明确地执行此操作:

Scanner sc = new Scanner(System.in);
String separator = sc.nextLine();
separator = separator.replaceAll("\\t","\t");
String s = "one\ttwo\tthree";
s = s.replaceAll(separator,"\r\n");
System.out.println(s);

demo

答案 2 :(得分:0)

您想要做的是分割字符串并将不同的行一次写入PrintStream。这样你就可以使用println。

Java是一种独立于平台的语言,新行依赖于平台。使用PrintStream.println将确保您的代码可移植。