我正在尝试定义一个用户可以使用 Java 中的正则表达式输入系统的字符串。该字符串不应包含尾随、前导或双空格,但可以在整个字符串名称中包含多个空格。它应该只包含一组定义的其他字符,允许的字符集是 ([0-9a-zA-Z_\\+=\\(\\)<>]+)
。
有没有办法在字符串中定义没有尾随、前导或双空格,而不使用“\S”,因为这将允许任何字符?
我尝试使用替换双空格
String file1 = file.replaceAll("\\s{2,}", " ");
有效,但是 file1.trim()
或
file1 = file1.replaceAll("^\\s+", "");
file1 = file1.replaceAll("\\s+$", "");
不替换尾随和前导空格。
最佳答案
您可以使用Pattern
,就像@Stephan提到的那样。但是,如果你只想做一些非常简单的事情,我认为你基本上走在正确的轨道上......只需在replaceAll(..)之前做一个trim():-
public String clean(String s) {
return s.trim().replaceAll("\\s{2}", " ");
}
@Test
public void testClean() throws Exception {
assertEquals("A B", clean(" A B"));
assertEquals("A B", clean("A B "));
assertEquals("A B", clean("A B"));
assertEquals("A B C", clean(" A B C "));
}
关于java - 正则表达式模式包含单个空格但没有前导或尾随空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9365039/