【问题标题】:Remove characters in string when it reaches specific length当字符串达到特定长度时删除字符串中的字符
【发布时间】:2016-04-15 08:02:38
【问题描述】:

在我的应用程序中,我允许输入数据库时​​字符串长度最多为 255 个字符。

我需要的是我有一个名为“名称”的字段,我输入的值类似于

Name = DisplayName + "_" + UniqueName;

我正在检查整个“名称”值是否大于 255,如果是,则需要单独从 DisplayName 中删除多余的字符。

类似Name = "abcefghijklmnopqrstuvwxyz" + "_" + "zyxwvutsrqponmlkjihgfecba";

如果我有这样的字符串并且 char 大于 255,(比如 270) 我需要从显示名称中删除 15 个字符。

如何在 C# 中实现这一点??

【问题讨论】:

  • 更好的做法是将 DisplayName 和 UniqueName 存储在不同的列中。

标签: c# string string-length


【解决方案1】:

这个问题对我来说有点不清楚。但是,如果您想在设置值后从Name 中删除多余的字符,您可以使用String.Substring

Name = DisplayName + "_" + UniqueName;
Name = Name.Length()<=255 ? Name : Name.SubString(0,254);

【讨论】:

    【解决方案2】:

    假设 DisplayNameUniqueName 保证不包含您的分隔符“_”,您将不得不拆分字符串,修改(以前的)DisplayName 并重新连接它们:

    var displayName = "Shesha";
    var uniqueName = "555";
    var fullName = displayName + "_" + uniqueName;
    
    if (fullName.Length > 255)
    {
       var charsToRemove = fullName.Length - 255;
    
       // split on underscore.
       var nameParts = fullName.Split('_'); 
    
       var displayNameLength = nameParts[0].Length;
       var truncatedDisplayName = nameParts[0].Substring(0, displayNameLength - charsToRemove);
       fullName = truncatedDisplayName + "_" + nameParts[1];
    }
    

    当然,所有这些都假设这个长度检查发生在全名被构造之后。您当然可以在之前进行检查,省去拆分的麻烦:

    var combinedLength = displayName.Length + uniqueName.Length + 1; // 1 for _.
    var charsToRemove = combinedLength - 255;
    if (charsToRemove > 0)
    {
        // same logic as above, but instead of splitting the string, you have
        // the original parts already.
    }
    

    当然,这只是一个基本示例。真正的代码也应该有:

    1. 变量/常量/配置来指定最大长度,也可能是分隔符。
    2. 错误检查以确保 Split() 准确返回两个部分,例如。

    【讨论】:

      【解决方案3】:

      您可以使用 .Net framework for C# 中提供的 substring 函数,这将允许您轻松获取 255 个字符的字符串。

      例子:

      if(str.Length > 255)
      {
        str = str.Substring(0, 255);
      }
      

      【讨论】:

        【解决方案4】:

        我有一个扩展方法来做到这一点:

        public static string RemoveExcessCharacters(this string value, int maxLen)
        {
           return (value.Length > maxLen) ? value.Substring(0, maxLen) : value;
        }
        

        像这样使用:

        string value = "abcdefg".RemoveExcessCharacters(3);
        

        返回“abc”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-03
          • 1970-01-01
          • 2011-08-21
          • 2022-10-12
          相关资源
          最近更新 更多