Java 如何从字符串中转义\s(空格字符)?
我需要的是对字符串中的每个单词进行转义,并对每个特殊字符进行转义,如:!,?。'@。我试过的是:Java 如何从字符串中转义\s(空格字符)?,java,regex,Java,Regex,我需要的是对字符串中的每个单词进行转义,并对每个特殊字符进行转义,如:!,?。'@。我试过的是: public class Solution { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Pattern pat = Pattern.compile("[!|,|?|.|_|'|@]"); String a
public class Solution
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
Pattern pat = Pattern.compile("[!|,|?|.|_|'|@]");
String a = scan.nextLine();
scan.close();
String[] part = pat.split(a);
System.out.println(part.length);
for(String p: part)
System.out.println(p);
}
}
虽然这确实会转义特殊字符,但我无法找到让正则表达式匹配每个单词之间空格的方法。
此外,我还尝试在正则表达式之后使用\s
和\\s
例如:这条狗是一只非常懒的狗,不是吗?
输出应为:
The
dog
is
a
very
lazy
dog
isn
t
he
[…]
描述单个字符的范围,而不是两个字符(我们可以允许使用诸如+
*
{nim,max}
之类的量词重复字符,但这里的情况并非如此)
另外,您不需要在[…]
内部使用|
,因为它是简单字符,而不是OR运算符。所以[a | b]
并不意味着a
或b
,它代表字符a
(因此任何类似
的
重复都将代表另一个
和c
)
根据您提供的示例,您可能正在寻找:
Pattern pat = Pattern.compile("[!,?._'@\\s]+");
或者因为这可能更具可读性
Pattern pat = Pattern.compile("([!,?._'@]|\\s)+");
您需要在[…]
之外使用或运算符
,并将\s
作为“\\s
写入,因为\
也是字符串文本中的特殊字符(例如,它可以用于创建制表符\t
),因此需要转义
我用(..)
包装了整个表达式,以创建一个可以表示所有分隔符的组。这允许我使用+
(表示“一个或多个事件”的量词)现在,您可以将正则表达式看作是拆分的单个分隔符,.
,这将确保对几个连续分隔符的整个表达式进行拆分,而不是分别对每个分隔符进行拆分。因此,与“a,.b”
->[“a,”,“b”]
相比,现在我们将得到[“a”,“b”]
我认为您对“|”的看法是正确的性格但这仍然不能转义字符串中的每个空格。你说的“转义字符串中的每个空格”是什么意思?您能更新您的问题并发布您的输入和预期结果吗?@MinaF让我知道编辑的版本是否适合您。如果有,将尝试添加解释。