Java 如何用单斜杠替换特殊字符
我有一个关于Java中字符串的问题。比方说,我有一个这样的字符串:Java 如何用单斜杠替换特殊字符,java,Java,我有一个关于Java中字符串的问题。比方说,我有一个这样的字符串: String str = "The . startup trace ?state is info?"; 由于字符串包含特殊字符,如“?”,我需要根据我的要求将字符串替换为“\?”。如何将特殊字符替换为“\”?我试着用下面的方法 str.replace("?","\?"); 但它给出了一个编译错误。然后我尝试了以下方法: str.replace("?","\\?"); 当我这样做时,它会将特殊字符替换为“\\”。但当我打印
String str = "The . startup trace ?state is info?";
由于字符串包含特殊字符,如“?”
,我需要根据我的要求将字符串替换为“\?”
。如何将特殊字符替换为“\”
?我试着用下面的方法
str.replace("?","\?");
但它给出了一个编译错误。然后我尝试了以下方法:
str.replace("?","\\?");
当我这样做时,它会将特殊字符替换为“\\”
。但当我打印字符串时,它会以单斜杠打印。我原以为它只使用单斜杠,但调试时发现变量使用的是“\\\”
有人能建议如何用单斜杠(
“\”
)替换特殊字符吗?如果您想用\?
替换,有两种可能性:替换和替换所有
(对于正则表达式):
结果是“启动跟踪\?状态为info\?”
如果要将?
替换为\
,只需从第二个参数中删除?
字符 关于逃逸序列
声明如下:
String s = "\\";
定义包含单个反斜杠的字符串。也就是说,s.length()==1
这是因为\
是String
和char
文本的Java转义字符。以下是一些其他示例:
“\n”
是长度为1的字符串,包含换行符
“\t”
是长度为1的字符串,包含制表符
“\”
是长度为1的字符串,包含双引号字符
“\/”
包含无效的转义序列,因此不是有效的字符串
- 它会导致编译错误
当然,您可以将转义序列与字符串中的正常未转义字符组合起来:
System.out.println("\"Hey\\\nHow\tare you?");
上述打印(制表符间距可能不同):
工具书类
另见
回到问题上来
您的问题定义非常模糊,但以下代码段的工作原理如下:
System.out.println("How are you? Really??? Awesome!".replace("?", "\\?"));
上述代码段将?
替换为\?
,从而打印:
How are you\? Really\?\?\? Awesome!
How are you\ Really\\\ Awesome!
如果您想用另一个char
替换一个char
,那么还有一个重载:
System.out.println("How are you? Really??? Awesome!".replace('?', '\\'));
上述代码段将?
替换为\
,从而打印:
How are you\? Really\?\?\? Awesome!
How are you\ Really\\\ Awesome!
String
API链接
-
- 用指定的文字
替换
序列替换与文字目标
序列匹配的此字符串的每个子字符串
-
- 返回将此字符串中所有出现的
oldChar
替换为newChar
后生成的新字符串
关于正则表达式如何使事情复杂化
如果您使用的是replaceAll
或任何其他基于正则表达式的方法,那么事情就会变得更加复杂。如果您了解一些基本规则,就可以大大简化
- Java中的正则表达式模式以
String
值的形式给出
- 元字符(如
?
和
)具有特殊含义,可能需要在前面加上反斜杠进行转义,以便逐字匹配
- 反斜杠也是替换
String
值中的一个特殊字符
上述因素可能导致在Java源代码中的模式和替换字符串中需要大量反斜杠
对于这个问题,您似乎不需要正则表达式,但这里有一个简单的示例来说明它可以做什么:
System.out.println(
"Who you gonna call? GHOSTBUSTERS!!!"
.replaceAll("[?!]+", "<$0>")
);
System.out.println(
“你要打电话给谁?捉鬼者!!!”
.replaceAll(“[?!]”+“,”)
);
上述印刷品:
Who you gonna call<?> GHOSTBUSTERS<!!!>
你要叫谁来捉鬼
模式[?!]+
匹配字符类[…]
定义中任何字符的一个或多个(+
)(在本例中,该定义包含?
和!
)。替换字符串
基本上将整个匹配的$0
放在角括号内
相关问题
- -讨论常见错误,如
split(“.”
和split(“|”)
正则表达式引用
-
- 及
- 及
但当我打印字符串时,它会打印
用单斜杠
很好,这正是你想要的,不是吗
有两条简单的规则:
字符串文字中的反斜杠必须指定为2才能满足编译器的要求,即“\”。否则它将被视为特殊字符转义
正则表达式中的反斜杠必须指定为2才能满足正则表达式的要求,否则它将被视为正则表达式转义。因为(1)这意味着您必须编写2x2=4个反斜杠:“\\\”(因为论坛软件,我实际上必须编写8!)
输出:-新字符串=\
在java中,“\\”
视为“\”
。因此,上面的代码将“\”
单斜杠替换为\\“
你还没开机吗?编辑:抱歉,你的编辑仍然无法解释实际问题:)@BalusC:我再次编辑了我的答案。我不明白OP到底想要什么。OP想知道为什么他需要一个双反斜杠来匹配一个单反斜杠。Polygene很好地解释了这一点。他还问:“有人能建议如何……”请解决人们对你的问题的困惑。给出多个前后的例子,涵盖你的所有期望。
String str="\\";
str=str.replace(str,"\\\\");
System.out.println("New String="+str);