我正在尝试定义一个用户可以使用Java中的Regex进入系统的字符串。该字符串不应包含尾部,前导或双精度空格,但可能在整个字符串名称中包含许多空格。它应该只包含一组已定义的其他字符,允许的字符集为([0-9a-zA-Z_\\+=\\(\\)<>]+)
。
有没有办法在字符串中定义没有尾随,前导或双重空格,而不是使用'\ S',因为这会允许任何字符?
我尝试使用
替换双空格 String file1 = file.replaceAll("\\s{2,}", " ");
可以使用file1.trim()
或
file1 = file1.replaceAll("^\\s+", "");
file1 = file1.replaceAll("\\s+$", "");
不会替换尾随和前导空格。
答案 0 :(得分:2)
您可以使用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 "));
}