判断,找出Java代码中的函数,也可能是类构造函数(初次版本)。

未执行效果:

 执行后效果:

未执行效果:

 执行后效果:

代码:

  /// <summary>
        /// 判断Java代码中的函数,也可能是类构造函数
        /// </summary>
        /// <param name="sText"></param>
        /// <returns></returns>
        /// 创建时间: 2022-09-18      最后一次修改时间:2022-09-18
        public static StringList_ _Syntax_Java_Get_Function(this string sText)
        {
            string sTrue = sText._Syntax_C_Remove_ExplanatoryNote();

            StringList_ slResul = new StringList_();

            for(int i =  0;  i < sTrue.Length; ++i)
            {
                char  cLeftBracket = sTrue[i];

                if(cLeftBracket == '(' )
                {
                    string sWord = sTrue._Syntax_Java_Get_Left_Identifier(i);
                 
                    if (sWord.Length > 0 && sWord._Syntax_Java_Is_Identifier()) //如果左边的标识符是正确的Java标识符,暂时不检查是否语法错误
                    {
                        if(slResul.IndexOf(sWord) == -1)  //这里也可能是类的构造函数
                        {
                            slResul.Add(sWord);
                        }
                    }
                }
            }


            return slResul;
        }


        /// <summary>
        /// 获取 nPos左边的第一个标识符
        /// </summary>
        /// <param name="sText"></param>
        /// <param name="nPos"></param>
        /// <returns></returns>
        /// 创建时间: 2022-09-18      最后一次修改时间:2022-09-18
        public static string _Syntax_Java_Get_Left_Identifier(this string sText, int nPos)
        {
            //找出 nPos 左边的第一个除空格外的可见字符

            if (nPos >= sText.Length || nPos < 0) return "";

            int nEnd = 0;

            for (int i = nPos - 1; i >= 0; --i)
            {
                char ch = sText[i];

                if(ch._IsControl() || ch._IsWhiteSpace() || ch._IsUnPrintable())
                {

                }
                else
                {
                    nEnd = i;
                    break;
                }
            }



            DList_<char> dl = new DList_<char>();

            for (int i = nEnd; i >= 0; --i)
            {
                char ch = sText[i];

                if (ch._IsPunctuation() || ch._IsUnPrintable() || ch._IsControl() || ch._IsWhiteSpace() || ch._IsSeparator() || ch._IsProgramOperationalCharacter())
                {          
                    break;
                }

                dl.Add(ch);
            }

            StringBuilder sb = new StringBuilder(dl.Count + 5);

            DListNote_<char> dn = dl.Last;
            while(dn != null)
            {
                sb.Append(dn.Data);
                dn = dn.Prev;
            }

            return sb.ToString();
        }


        /// <summary>
        /// 判断是否正确的Java标识符
        /// 标识符
        ///     标识符可以简单地理解为一个名子,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。
        ///     Java语言规定标识符由任意顺序的字母、下划线 (_) 、美元符号($)和数字组成,并且第一个字符不
        ///     能是数字。标识符不能是Java中的保留关键字。 
        /// </summary>
        /// <param name="sWord"></param>
        /// <returns></returns>
        public static bool _Syntax_Java_Is_Identifier(this string sWord) => sWord.Length == 0 ? false : Syntax_.Java_Keyword.IndexOf(sWord) == -1;
 


       

        /// <summary>
        /// 判断Java代码中的函数,也可能是类构造函数
        /// </summary>
        /// <param name="sText"></param>
        /// <returns></returns>
        /// 创建时间: 2022-09-18      最后一次修改时间:2022-09-18
        public static StringList_ _Syntax_Java_Get_Function(this string sText)
        {
            string sTrue = sText._Syntax_C_Remove_ExplanatoryNote();

            StringList_ slResul = new StringList_();

            for(int i =  0;  i < sTrue.Length; ++i)
            {
                char  cLeftBracket = sTrue[i];

                if(cLeftBracket == '(' )
                {
                    string sWord = sTrue._Syntax_Java_Get_Left_Identifier(i);
                 
                    if (sWord.Length > 0 && sWord._Syntax_Java_Is_Identifier()) //如果左边的标识符是正确的Java标识符,暂时不检查是否语法错误
                    {
                        if(slResul.IndexOf(sWord) == -1)  //这里也可能是类的构造函数
                        {
                            slResul.Add(sWord);
                        }
                    }
                }
            }


            return slResul;
        }


        /// <summary>
        /// 获取 nPos左边的第一个标识符
        /// </summary>
        /// <param name="sText"></param>
        /// <param name="nPos"></param>
        /// <returns></returns>
        /// 创建时间: 2022-09-18      最后一次修改时间:2022-09-18
        public static string _Syntax_Java_Get_Left_Identifier(this string sText, int nPos)
        {
            //找出 nPos 左边的第一个除空格外的可见字符

            if (nPos >= sText.Length || nPos < 0) return "";

            int nEnd = 0;

            for (int i = nPos - 1; i >= 0; --i)
            {
                char ch = sText[i];

                if(ch._IsControl() || ch._IsWhiteSpace() || ch._IsUnPrintable())
                {

                }
                else
                {
                    nEnd = i;
                    break;
                }
            }

            DList_<char> dl = new DList_<char>();

            for (int i = nEnd; i >= 0; --i)
            {
                char ch = sText[i];

                if (ch._IsPunctuation() || ch._IsUnPrintable() || ch._IsControl() || ch._IsWhiteSpace() || ch._IsSeparator() || ch._IsProgramOperationalCharacter())
                {          
                    break;
                }

                dl.Add(ch);
            }

            StringBuilder sb = new StringBuilder(dl.Count + 5);

            DListNote_<char> dn = dl.Last;
            while(dn != null)
            {
                sb.Append(dn.Data);
                dn = dn.Prev;
            }

            return sb.ToString();
        }


        /// <summary>
        /// 判断是否正确的Java标识符
        /// 标识符
        ///     标识符可以简单地理解为一个名子,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。
        ///     Java语言规定标识符由任意顺序的字母、下划线 (_) 、美元符号($)和数字组成,并且第一个字符不
        ///     能是数字。标识符不能是Java中的保留关键字。 
        /// </summary>
        /// <param name="sWord"></param>
        /// <returns></returns>
        public static bool _Syntax_Java_Is_Identifier(this string sWord) => sWord.Length == 0 ? false : Syntax_.Java_Keyword.IndexOf(sWord) == -1;
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值