Как я могу убедиться, что строка содержит не более одного пробела в любом месте? - PullRequest
2 голосов
/ 02 июля 2019

Я беру строку в качестве входных данных, и из-за некоторой последующей обработки очень важно, чтобы строка не содержала 2 или более последовательных пробелов где-либо в строке.

Например

string foo = "I am OK" is a valid string
string foo = " I am OK " is a valid string
string foo = "  I am OK" is NOT a valid string due to the initial double white space
string foo = "I am OK  " is NOT a valid string due to the trailing double whitespaces
string foo = " I am  OK " is NOT a valid string since it has 2 whitespaces between am and OK

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

string normalizedQuery = apiInputObject.Query.Replace(" ", "");

Но это работает только, я уверен, что в строке есть одиночные пробелы, поэтому мне нужно убедиться, что в строке больше нет, поэтому я могу использовать эту замену.

Как я могу убедиться, что строка соответствует моему формату?

Ответы [ 6 ]

3 голосов
/ 02 июля 2019

Вы можете попробовать использовать шаблон регулярных выражений @"^(?!.*[ ]{2}).*$":

Match result = Regex.Match("One space", @"^(?!.*[ ]{2}).*$");
if (result.Success) {
    Console.WriteLine("ONLY ONE SPACE OR LESS");
}
2 голосов
/ 02 июля 2019

Использование IndexOf.

public static void Main()
{
    var tests = new string[]
    {
         "I am OK",
         " I am OK ",
         "  I am OK",
         "I am OK  ",
         " I am  OK " 
    };
    foreach (var test in tests)
    {
        var hasDoubleSpace = (test.IndexOf("  ") != -1);
        Console.WriteLine("'{0}' {1} double spaces", test, hasDoubleSpace ? "has" : "does not have");
    }
}

Выход:

'I am OK' does not have double spaces
' I am OK ' does not have double spaces
'  I am OK' has double spaces
'I am OK  ' has double spaces
' I am  OK ' has double spaces

Fiddle

1 голос
/ 02 июля 2019

Исходя из ваших требований, я думаю, вам просто нужно заменить два последовательных пробела на один.

foo=foo.Replace("  "," ");
0 голосов
/ 05 июля 2019

Я бы перебрал всю строку, символ за символом и проверил, были ли два соседних символа пробелами:

for(int i=0; i<foo.Length-1; i++){
    if(foo[i] == ' ' && foo[i+1] == ' '){
        return false;
    }
}
return true;
0 голосов
/ 02 июля 2019
        string foo = "I    am      OK  ";
        do
        {
            if (foo.Contains("  ")) foo = foo.Replace("  ", " ");
            else break;
        } while (true);
        Console.WriteLine(foo);
0 голосов
/ 02 июля 2019

Вы можете использовать String.Contains для поиска " ", но если пользователь может ввести НИЧЕГО, у вас возникнет большая проблема, чем простые пробелы, такие как различные юникодные пробелы, иероглифы и так далее (то есть, если только ваша пост-обработкаищет только простые пробелы и в других случаях допускает юникод).

...