-
Notifications
You must be signed in to change notification settings - Fork 108
Expand file tree
/
Copy pathInputParser.cs
More file actions
68 lines (61 loc) · 2.13 KB
/
InputParser.cs
File metadata and controls
68 lines (61 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System;
using System.Collections.Generic;
using System.Text;
namespace StringCalculator.Logic
{
internal class InputParser
{
public int[] Parse(string input)
{
List<string> delimiters = new List<string>();
delimiters.AddRange(new string[] {",","\n"});
if (hasSpecialDelimiter(input))
{
delimiters.AddRange(getSpecialDelimiters(input));
input = removeSpecialDelimiterLine(input);
}
List<int> numbers = new List<int>();
if (!String.IsNullOrEmpty(input.Trim()))
foreach (string part in input.Split(delimiters.ToArray(), StringSplitOptions.RemoveEmptyEntries))
numbers.Add(int.Parse(part));
return numbers.ToArray();
}
bool hasSpecialDelimiter(string input)
{
return (input.StartsWith("//"));
}
string[] getSpecialDelimiters(string input)
{
List<string> delimiters = new List<string>();
string delimiterLine = input.Substring(2, input.IndexOf('\n') -2);
StringBuilder stbDelimiter = new StringBuilder();
bool inDelimiter = false;
foreach (char c in delimiterLine)
{
switch (c)
{
case '[':
inDelimiter = true;
stbDelimiter = new StringBuilder();
break;
case ']':
inDelimiter = false;
delimiters.Add(stbDelimiter.ToString());
break;
default:
if (inDelimiter)
stbDelimiter.Append(c);
else
delimiters.Add(c.ToString());
break;
}
}
return delimiters.ToArray();
}
string removeSpecialDelimiterLine(string input)
{
int startIndex = input.IndexOf('\n') + 1;
return input.Substring(startIndex);
}
}
}