Шаблон регулярных выражений, содержащий одиночные пробелы, но без начальных или конечных пробелов? - PullRequest
2 голосов
/ 20 февраля 2012

Я пытаюсь определить строку, которую пользователь может ввести в систему, используя Regex в Java. Строка не должна содержать конечные, начальные или двойные пробелы, но может содержать множество пробелов в имени строки. Он должен содержать только определенный набор других символов, допустимый набор символов ([0-9a-zA-Z_\\+=\\(\\)<>]+).

Есть ли способ определить в конце ни один завершающий, начальный или двойной пробел, не используя '\ S', так как это позволит использовать любой символ?

Я попытался заменить двойные пробелы, используя

String file1 = file.replaceAll("\\s{2,}", " ");, который работает, но затем file1.trim() или

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

не заменяет пробелы в конце и в начале.

1 Ответ

2 голосов
/ 20 февраля 2012

Вы можете использовать Pattern как то, что упомянул @Stephan. Но, если вы просто хотите сделать что-то действительно простое, я думаю, что вы в основном на правильном пути ... просто выполните trim () перед replaceAll (..): -

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