正则表达式包含单个空格但没有前导或尾随空格?

时间:2012-02-20 16:54:16

标签: java regex trim

我正在尝试定义一个用户可以使用Java中的Regex进入系统的字符串。该字符串不应包含尾部,前导或双精度空格,但可能在整个字符串名称中包含许多空格。它应该只包含一组已定义的其他字符,允许的字符集为([0-9a-zA-Z_\\+=\\(\\)<>]+)

有没有办法在字符串中定义没有尾随,前导或双重空格,而不是使用'\ S',因为这会允许任何字符?

我尝试使用

替换双空格

String file1 = file.replaceAll("\\s{2,}", " ");可以使用file1.trim()

file1 = file1.replaceAll("^\\s+", "");
file1 = file1.replaceAll("\\s+$", "");

不会替换尾随和前导空格。

1 个答案:

答案 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  "));
}