gpt4 book ai didi

java - 如何从字符串中转义\s(空格字符)?

转载 作者:行者123 更新时间:2023-11-30 02:52:35 33 4
gpt4 key购买 nike

我需要的是转义字符串中的每个单词并转义每个特殊字符,例如:!,?._'@。我尝试过的是这样的:

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

最佳答案

[..]character class它描述了单个字符的范围,而不是两个字符(我们可以允许使用像 + * {nim,max} 这样的量词重复字符,但是这里的情况并非如此)。

此外,您不需要在 [..] 内使用 | 因为它是简单字符,而不是 OR 运算符。所以 [a|b] 并不意味着 a OR b,它代表字符 a | b (因此 | 的任何重复,如 |c 将代表另一个 | c)。

根据您提供的示例,您可能正在寻找:

Pattern pat = Pattern.compile("[!,?._'@\\s]+");

或者因为这可能更具可读性

Pattern pat = Pattern.compile("([!,?._'@]|\\s)+");

您需要在 [..] 之外使用 OR 运算符 | 并将 \s 写为"\\s 因为 \ 也是字符串文字中的特殊字符(它可以用于创建制表符 \t),所以它需要转义。

我用 (..) 包装了整个表达式来创建可以代表所有分隔符的组。这允许我使用 + (表示“一次或多次出现”的量词),因此现在您的正则表达式可以将 ,. 视为分割的单个分隔符,这将确保一次分割几个连续分隔符的整个表达式,而不是分别分割它们。因此,现在我们将得到 ["a", "b",而不是 "a,.b" -> ["a, "", "b"] ”]

关于java - 如何从字符串中转义\s(空格字符)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189389/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com