-2

I need to check if a string contains only numbers(integers and decimal) with a space in between them. Eg: 1 2 4.5 72 (this is acceptable); 1 7..5 3.2.1 (this is unacceptable)

Stephen Kennedy
  • 20,585
  • 22
  • 95
  • 108
Tasha
  • 17
  • 1
  • 1
    Remove spaces from the string and try to parse the number to double. There is nothing in built available in C# – Chetan Nov 07 '19 at 04:56
  • Use String.replace(" ",""); for remove spaces after use try-catch for convert.toDouble – erdi yılmaz Nov 07 '19 at 05:04
  • Does this want to check the individual strings between whitespace or the whole string as a whole? This question as it stands is too broad. – RoadRunner Nov 07 '19 at 05:15
  • Why request closing because of off-topic and unclear and too-board? I don't understand. I think it is a good question and I had joy in formulating an answer. This may be usefull. Thanks. –  Nov 07 '19 at 10:09
  • https://stackoverflow.com/questions/7461080/fastest-way-to-check-if-string-contains-only-digits – jimjim Nov 08 '19 at 00:01

2 Answers2

0

You can use Double.TryParse() to verify if a string is a valid number, assuming integers and floats/doubles in this case. You will have to split the strings by whitespace beforehand using String.Split() to check each number individually. You can also utilize Enumerable.All<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) from LINQ to check if all the strings satisfy a condition.

List<string> strings = new List<string> { "1 2 4.5 72", "1 7..5   3.2.1" };

foreach (string item in strings)
{
    if (item.Split (new[] { " " }, StringSplitOptions.RemoveEmptyEntries).All (str => double.TryParse (str, out _)))
    {
        Console.WriteLine ($"{item} has only valid numbers.");
    }
    else
    {
        Console.WriteLine ($"{item} does have invalid numbers.");
    }
}
// 1 2 4.5 72 has only valid numbers.
// 1 7..5   3.2.1 does have invalid numbers.
Battle
  • 786
  • 10
  • 17
RoadRunner
  • 25,803
  • 6
  • 42
  • 75
  • I don't think this was what the OP was trying to ask, I understand that he wants to know if the whole string is a number or a double. so I suggest `string.replace` spaces first before passing – Bosco Nov 07 '19 at 05:07
  • @Bosco This seems a little ambiguous. The OP states that he wants to *"contains only numbers(integers and decimal) with a space in between them*", which means that the string could contain more than one number. Off course one could also interpret it your way as well. He/she needs to clarify this.One of the other answers has also interpreted it my way so its definitely an enquiry to ask. – RoadRunner Nov 07 '19 at 05:10
  • This is the correct answer. However it will get issues if you have 2 spaces next to each other, because empty strings will fail the TryParse and return false. I also corrected the resulting statements. I'll edit the answer. – Battle Nov 07 '19 at 05:54
  • 1
    @Battle Thanks, some very good points. I accepted your edits and suggestions because it improves the answer. – RoadRunner Nov 07 '19 at 05:55
  • Ah sorry, I made a little mistake: The first string example should have multiple spaces (and still be valid), the second one doesn't need to. – Battle Nov 07 '19 at 05:58
-1

you can use split space first then check every split element numberic yes or not by decimal.TryParse + LINQ Any.

void Main()
{
    Console.WriteLine(  Check("1 2 4.5 72") ); //true
    Console.WriteLine(  Check("1 7..5 3.2.1")   ); //false
}

bool Check(string text)
{
    return text.Split(' ').Any(_ => decimal.TryParse(_, out var num) == false) == false;
}
Wei Lin
  • 3,591
  • 2
  • 20
  • 52