我正在尝试替换字符串中的多个子字符串,例如我有以下字符串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);
答案 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);
答案 2 :(得分:0)
您想要做的是分割字符串并将不同的行一次写入PrintStream。这样你就可以使用println。
Java是一种独立于平台的语言,新行依赖于平台。使用PrintStream.println将确保您的代码可移植。