namespace ScriptCode_Set
{
public class USet
{
/*
该类实现一个功能:
查找出所有的类(顶级类,不包含子类)
*/
public List<UClass> Main(string myOri)
{
List<UClass> myResult = new List<UClass>();
//-----------------------------------
int NoteOfBracket = 0;//括号的标记,遇到{就+1,遇到}就-1
string Content = string.Empty;//类包含的内容
string Note = string.Empty;//类的标记
UClass Class = new UClass();
//-----------------------------------
/*下面开始一个一个分析char*/
for(int i=0;i<myOri.Length; i++)
{
if (myOri[i] == ';')//如果当前char是;
{
if(NoteOfBracket == 0)//表示当前字符在类外
{
Note = string.Empty;//重置标记
}else//表示在类内
{
Content += myOri[i];
}
}else if (myOri[i] == '{')//如果当前字符为{
{
NoteOfBracket++;//标记自增
if(NoteOfBracket == 1)//表示顶级类的开始
{
Class.Name = Note;//把标记赋值给类的名称
}else//表示在顶级类内部
{
Content += myOri[i];
}
}else if (myOri[i] == '}')
{
NoteOfBracket--;//标记自减
if(NoteOfBracket == 0)//顶级类结束
{
Class.Content = Content;
myResult.Add(Class);
Class = new UClass();
Note = string.Empty;
Content = string.Empty;
}else//表示在顶级类内部
{
Content += myOri[i];
}
}else//如果是其他字符
{
if(NoteOfBracket == 0)//表示在类外
{
Note += myOri[i];
}else//表示在类内
{
Content += myOri[i];
}
}
}
//-----------------------------------
return myResult;
}
}
/*下面是需要用到的类*/
/*很简单,只是为了方便返回*/
public class UClass
{
/*
它有两个属性:
1、名称
2、内容
*/
private string _Name;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
}
private string _Content;
public string Content
{
get
{
return _Content;
}
set
{
_Content = value;
}
}
}
}
——————————
下面是测试图:
测试图中涉及的代码:
[C#] 纯文本查看复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ScriptCode_Set;
using Class = ScriptCode_Set.UClass;
namespace Test
{
public partial class TestForm : Form
{
public TestForm()
{
InitializeComponent();
}
List<Class> Classes = new List<Class>();
private void B_ToProcessed_Click(object sender, EventArgs e)
{
USet Set = new USet();
Classes = Set.Main (tBox_Ori .Text);
lBox.Items.Clear();
for(int i = 0; i < Classes.Count; i++)
{
lBox.Items.Add(Classes[i].Name);
}
}
private void lBox_Click(object sender, EventArgs e)
{
if(lBox .SelectedIndex > -1)
{
tBox_Name.Text = Classes[lBox.SelectedIndex].Name;
tBox_Content .Text = Classes[lBox.SelectedIndex].Content;
}
}
}
}