【问题标题】:Regex Pattern containing single spaces but no leading or trailing spaces?包含单个空格但没有前导或尾随空格的正则表达式模式?
【发布时间】:2012-02-20 16:54:15
【问题描述】:

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

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

我尝试使用

替换双空格

String file1 = file.replaceAll("\\s{2,}", " "); 有效,但随后 file1.trim()

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

不替换尾随和前导空格。

【问题讨论】:

  • 使用PatternMatcher。见this tutorial
  • String.trim() 将从开头和结尾删除所有空白类型字符。如果不是其他问题,或者那些只是显示为空白的其他类型的特殊字符..
  • System.out.println("\"" + (" ab c ".replaceAll("\\s{2,}", " ").replaceAll("^\\s+", "").replaceAll("\\s+$", "")) + "\""); -> "ab c";我觉得不错?

标签: java regex trim


【解决方案1】:

您可以使用@Stephan 提到的Pattern。但是,如果你只是想做一些非常简单的事情,我认为你基本上是在正确的轨道上......只需在 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  "));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    相关资源
    最近更新 更多