当字符串达到特定长度时删除字符串中的字符

Remove characters in string when it reaches specific length

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

我需要的是一个名为 "Name" 的字段,我输入的值类似于

Name = DisplayName + "_" + UniqueName;

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

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

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

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

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

示例:

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

这个问题我有点不清楚。但是如果你想在设置它的值后从 Name 中删除额外的字符,你可以使用 String.Substring

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

假设 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];
}

当然,所有这一切都假定此长度检查发生在之后 全名已被构造。您当然可以在 before 之前进行检查,省去拆分的工作:

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. Variables/constants/configuration 指定最大长度,也可能是分隔符。
  2. 错误检查以确保 Split() returns 正好是两个部分,例如。

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

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

像这样使用:

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

Returns“abc”