c# - 如何使这两种方法更有效

标签 c# asp.net linq stringbuilder

<分区>

大家好,这是我关于 SO 的第一个问题,所以请放轻松。

我正在使用 Lambda/LINQ,同时为自己构建了一些实用方法。

  1. 第一种方法接受字符串,

    "AdnanRazaBhatti" 
    

    然后把它分解成

    "Adnan Raza Bhatti"
    
  2. 第二种方法像第一种方法一样接受字符串,也接受,

    out String[] brokenResults 
    

    并像第一种方法一样返回损坏的字符串,并按如下方式填充 brokenResults 数组。

      "Adnan" "Raza" "Bhatti"
    

问题:

一个。您能否建议如何使这些方法更有效?

B.当我尝试使用 StringBuilder 时,它告诉我扩展方法,例如,对于 StringBuilder 类,Select 不存在,为什么会这样?尽管索引器在 StringBuilder 上工作以获取像 StringBuilder s = new StrinBuilder("Dang"); 这样的字符字符 c = s[0];这里的 char 将是 D;

代码

方法一:

  public static string SplitCapital( string source )
    {

        string result = "";
        int i = 0;
        //Separate all the Capital Letter
        var charUpper = source.Where( x => char.IsUpper( x ) ).ToArray<char>( );
        //If there is only one Capital letter then it is already atomic. 
        if ( charUpper.Count( ) > 1 ) {
            var strLower = source.Split( charUpper );
            foreach ( string s in strLower )
                if ( i < strLower.Count( ) - 1 && !String.IsNullOrEmpty( s ) )
                    result += charUpper.ElementAt( i++ ) + s + " ";
            return result;
        }
        return source;
    }

方法二:

  public static string SplitCapital( string source, out string[] brokenResults )
    {
        string result = "";
        int i = 0;
        var strUpper = source.Where( x => char.IsUpper( x ) ).ToArray<char>( );

        if ( strUpper.Count( ) > 1 ) {
            var strLower = source.Split( strUpper );

            brokenResults = ( 
                from s in strLower
                where i < strLower.Count( ) - 1 && !String.IsNullOrEmpty( s )
                select result = strUpper.ElementAt( i++ ) + s + " " ).ToArray( );

            result = "";
            foreach ( string s in brokenResults )
                result += s;
            return result;
        }
        else { brokenResults = new string[] { source }; }
        return source;
    }

注意事项:

我计划使用这些实用方法来分解从数据库中获取的表列名称。

例如,如果列名是“BooksId”,我将使用其中一种方法以编程方式将其分解为“Books Id”,我知道还有其他方法或重命名列名,例如在设计窗口或 [数据集] 中。[ tableName].HeadersRow.Cells[0].Text = "Books Id"但我也计划在未来的其他地方使用这种方法。

谢谢

最佳答案

您可以使用以下扩展方法根据大写字母拆分字符串:

public static string Wordify(this string camelCaseWord)
    {
        /* CamelCaseWord will become Camel Case Word,  
          if the word is all upper, just return it*/

        if (!Regex.IsMatch(camelCaseWord, "[a-z]"))
            return camelCaseWord;

        return string.Join(" ", Regex.Split(camelCaseWord, @"(?<!^)(?=[A-Z])"));
    }

要拆分字符串数组中的字符串,可以使用:

public static string[] SplitOnVal(this string text,string value)
    {
        return text.Split(new[] { value }, StringSplitOptions.None);
    }

如果我们以你的例子为例,代码如下:

string strTest = "AdnanRazaBhatti";
var capitalCase = strTest.Wordify(); //Adnan Raza Bhatti
var brokenResults = capitalCase.SplitOnVal(" ");  //seperate by a blank value in an array

关于c# - 如何使这两种方法更有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7448252/

相关文章:

asp.net - 网站项目、项目引用和版本控制

c# - 匿名类、临时数据和匿名类的集合

c# - 如何跨多维数组(linq 或简单算法)中的列运行逻辑 'xnor'?

c# - 匹配失败的匹配字符串中的正则表达式索引

c# - 清除依赖属性

c# - 使用 Fluent NHibernate 将流畅的映射与自动映射混合在一起?

c# - 如何创建 ip 掩码并在 .net 上对其进行过滤?

c# - 使用 iTextsharp 将 PDF 拆分为多个 PDF

c# - Linq 查询按组求和

c# - 将泛型转换为接口(interface)类型约束