- static void Main(string[] args)
- {
- Console.WriteLine("Photo_[1, 2] = {0}", IndexOfParameterList("Photo_[1, 2]"));
- Console.WriteLine("[Photo]_[9999,1] = {0}", IndexOfParameterList("[Photo]_[9999,1]"));
- Console.WriteLine("[Photo]_[999[9,1] = {0}", IndexOfParameterList("[Photo]_[999[9,1]"));
- Console.WriteLine("[a, 1] = {0}", IndexOfParameterList("[a, 1]"));
- Console.WriteLine("[99] = {0}", IndexOfParameterList("[99]"));
- Console.WriteLine("[,] = {0}", IndexOfParameterList("[,]"));
- }
复制代码- private static int IndexOfParameterList(string s)
- {
- int n1, n2; // 代表参数列表的2个参数
- // 搜索第一个‘['所在的索引
- int indexOfLeftParenthesis = s.IndexOf('[');
- int indexOfRightParenthesis = -1;
- bool isStringHaveParameterList = false;
- // 如果能搜索到‘[',尝试搜索‘]’
- if (indexOfLeftParenthesis != -1)
- {
- indexOfRightParenthesis = s.Substring(indexOfLeftParenthesis).IndexOf(']');
- // 如果搜索到‘]’,isStringHaveParameterList为true
- isStringHaveParameterList = indexOfRightParenthesis != -1;
- }
- // 截取一个从‘[’开始的字符串
- string startLeftParenthesis = s.Substring(indexOfLeftParenthesis); ;
- // 用于从startLeftParenthesis中截取参数列表
- string brackets;
- #region 如果s包含参数列表,判断s是否有包含格式正确的参数列表
- while (isStringHaveParameterList == true)
- {
- brackets = startLeftParenthesis.Substring(0, startLeftParenthesis.IndexOf(']') + 1);
- #region 如果参数列表没有","
- if (brackets.Contains(',') == false)
- {
- // 该参数列表不符合规范,搜索下一个参数列表
- IsNewStringHaveParameterList(ref startLeftParenthesis, ref indexOfLeftParenthesis, ref indexOfRightParenthesis,
- ref isStringHaveParameterList);
- }
- #endregion
- #region 如果参数列表有",",检查2个参数
- else
- {
- // 截取参数列表第一个参数
- string s1 = brackets.Substring(1, brackets.IndexOf(',') - 1);
- // 截取参数列表第二个参数
- string s2 = brackets.Substring(brackets.IndexOf(',') + 1, brackets.IndexOf(']') - brackets.IndexOf(',') - 1);
- // isN1AInt表示第一个参数是否为数字
- bool isN1AInt = int.TryParse(s1, out n1);
- // isN2AInt表示第二个参数是否为数字
- bool isN2AInt = int.TryParse(s2, out n2);
- // 如果参数列表包含的不是数字
- if (isN1AInt == false || isN2AInt == false)
- {
- // 该参数列表不符合规范,搜索下一个参数列表
- IsNewStringHaveParameterList(ref startLeftParenthesis, ref indexOfLeftParenthesis, ref indexOfRightParenthesis,
- ref isStringHaveParameterList);
- }
- // 如果参数列表格式完全正确
- else
- {
- // 返回索引
- return s.IndexOf(brackets);
- }
- }
- #endregion
- }
- #endregion
- // 如果s不包含格式正确的参数列表
- return -1;
- }
- private static void IsNewStringHaveParameterList(ref string startLeftParenthesis,
- ref int indexOfLeftParenthesis, ref int indexOfRightParenthesis, ref bool isStringHaveParameterList)
- {
- // 这个参数列表格式不正确,去掉当前的'[',检查这段字符串
- string stringWithOutOldLeftParenthesis = startLeftParenthesis.Substring(1);
- // 检查stringWithOutOldLeftParenthesis是否包含参数列表
- indexOfLeftParenthesis = stringWithOutOldLeftParenthesis.IndexOf('[');
- if (indexOfLeftParenthesis != -1)
- {
- // 更新startLeftParenthesis,以便下次截取
- startLeftParenthesis = stringWithOutOldLeftParenthesis.Substring(indexOfLeftParenthesis);
- indexOfRightParenthesis = startLeftParenthesis.IndexOf(']');
- isStringHaveParameterList = indexOfRightParenthesis != -1;
- }
- else
- {
- isStringHaveParameterList = false;
- }
- }
复制代码
感谢大家的回复,这是我的解决方法,给大家作讨论。
|