Java 如何检查字符串是否包含'\r'\t''\n';。。。除了空间
如何检查字符串是否包含除空格以外的所有'\r'\t'\n' 例如,Java 如何检查字符串是否包含'\r'\t''\n';。。。除了空间,java,regex,Java,Regex,如何检查字符串是否包含除空格以外的所有'\r'\t'\n' 例如,String a=“a\nb”,String b=“a b”。我希望字符串a返回true,字符串b返回false 我知道有Character.isWhiteSpace(char c),还有Pattern.compile(“\\s”).matcher(string.find()。但它们都考虑了空间(“”)。我想要的是找出所有转义字符,它们被Character.isWhiteSpace(char c)method认为是空白,除了“”
String a=“a\nb”
,String b=“a b”
。我希望字符串a返回true,字符串b返回false
我知道有Character.isWhiteSpace(char c)
,还有Pattern.compile(“\\s”).matcher(string.find()
。但它们都考虑了空间(“”)。我想要的是找出所有转义字符,它们被Character.isWhiteSpace(char c)
method认为是空白,除了“”
我不想一个字符一个字符地检查,最好是有一个合适的正则表达式,我可以使用like模式。像这样编译
@Test
public void testLines() {
assertTrue(Pattern.compile("[\n\r\t]").matcher("a\nb").find());
assertFalse(Pattern.compile("[\n\r\t]").matcher("a b").find());
}
像这样
@Test
public void testLines() {
assertTrue(Pattern.compile("[\n\r\t]").matcher("a\nb").find());
assertFalse(Pattern.compile("[\n\r\t]").matcher("a b").find());
}
我假设当您说“除空格以外的所有'\r'\t'\n'”时,您的意思是“U+0020以外的任何空白字符”(其中U+0020是一个简单的空格)。这是正确的吗
如果是这样,那么以下正则表达式(通用形式)应该可以工作:
(?! )\s
这将匹配任何不是简单空格的空白字符。这个正则表达式使用
编辑:
正如@Bubletan在中所述,以下正则表达式也将起作用:
[^\S ]
这两个正则表达式是等价的。这是因为(?!)\s≣ “(不是字符U+0020)和(是空白)”
和[^\S]≣ “不是(非空白或字符U+0020)
具有相同的真值表:
Let P(x) be the predicate "x is the character U+0020"
Let Q(x) be the predicate "x is whitespace"
P | Q | (¬P)∧Q | ¬(¬Q∨P)
–– ––– –––––––– ––––––––
T T F F
T F T T
F T F F
F F F F
虽然为了提高效率,您可能最好使用@Bubletan的解决方案([^\s]
)。环视通常比其他方法慢
这是您可以实现它的方式:
// Create the pattern. (do only once)
Pattern pattern = Pattern.compile("[^\\S ]");
// Test an input string. (do for each input)
Matcher matcher = pattern.matcher(string);
boolean result = matcher.find();
result
随后将指示string
是否包含除简单空格以外的任何空格。我假设当您说“all'\r'\t'\n'…除空格以外”,您的意思是“U+0020以外的任何空格字符”(其中U+0020是简单空格)。这是否正确
如果是这样,那么以下正则表达式(通用形式)应该可以工作:
(?! )\s
这将匹配任何非简单空格的空白字符。此正则表达式使用
编辑:
正如@Bubletan在中所述,以下正则表达式也将起作用:
[^\S ]
这两个正则表达式都是等价的。这是因为(?!)\s≣ "(不是字符U+0020)和(是空格)“
和[^\S]≣ “不是(非空白或字符U+0020)
具有相同的真值表:
Let P(x) be the predicate "x is the character U+0020"
Let Q(x) be the predicate "x is whitespace"
P | Q | (¬P)∧Q | ¬(¬Q∨P)
–– ––– –––––––– ––––––––
T T F F
T F T T
F T F F
F F F F
虽然为了提高效率,您可能最好使用@Bubletan的解决方案([^\s]
)。环视通常比其他方法慢
这是您可以实现它的方式:
// Create the pattern. (do only once)
Pattern pattern = Pattern.compile("[^\\S ]");
// Test an input string. (do for each input)
Matcher matcher = pattern.matcher(string);
boolean result = matcher.find();
result
随后将指示string
是否包含除简单空格以外的任何空格。您可以使用[^\S]
来匹配除\S
(非空格)或
(空格)之外的所有内容
您可以使用[^\S]
来匹配除\S
(非空格)或
(空格)之外的所有内容
在Java中,使用[^\\h]+
\h表示所有类型的水平空格。但在其他语言中,据我所知,它不可用。在Java中,使用[^\\h]+
\h表示所有类型的水平空格。但在其他语言中,据我所知,它不可用。首先,删除空格,然后检查?为什么不检查/\n |\r |\t/
?@antoni,因为我想找出由字符定义的所有空格。isWhitespace(char)除了空格本身。我认为除了\n |\r |\t之外,Character.isWhitespace(char)定义的转义字符必须更多whitespace@GregaMohorko:这也是一种方法,首先删除空格,然后检查?为什么不检查/\n |\r |\t/
?@antoni,因为我想找出由Character.isWhitespace(char)定义的所有空格除了空格本身。我认为除了\n |\r |\t之外,Character.isWhitespace(char)定义的转义字符必须更多whitespace@GregaMohorko这是一个很详细的答案!谢谢!这是一个非常详细的答案!谢谢!