本文使用狀態機方法計算一個字符串中有多少參數
public class StringFormatParamCnt : BaseSolution
{
enum CType
{
//大括號外
outC = 0,
//{
left,
//大括號中間
middle,
//}
right,
}
public void Test()
{
println(ComputeParamCnt("hello"));
println(ComputeParamCnt("hello {0}"));
println(ComputeParamCnt("hello {0}{{"));
println(ComputeParamCnt("hello {{{0}abc12{1} {3}/{4}"));
}
public static int ComputeParamCnt(string content)
{
var cnt = 0;
var s = CType.outC;
for (var i = 0; i < content.Length; i++)
{
var c = content[i];
switch (s)
{
case CType.outC:
switch (c)
{
case '{':
s = CType.left;
break;
case '}':
s = CType.right;
break;
}
break;
case CType.left:
switch (c)
{
case '{':
break;
case '}':
//{}這樣的當直接展示的內容
s = CType.outC;
break;
default:
s = CType.middle;
break;
}
break;
case CType.middle:
switch (c)
{
case '{':
break;
case '}':
cnt++;
s = CType.right;
break;
default:
//這裏如果出現非數字應報錯
break;
}
break;
case CType.right:
switch (c)
{
case '{':
s = CType.left;
break;
case '}':
s = CType.outC;
break;
default:
s = CType.outC;
break;
}
break;
}
}
return cnt;
}
}