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

6
在我的应用程序中,当输入到数据库时,我允许字符串长度最多为255个字符。
我需要的是,我有一个名为“名称”的字段,我正在输入这样的值:
Name = DisplayName + "_" + UniqueName;

我正在检查整个“Name”值是否大于255,如果是,则需要仅从DisplayName中删除那些额外的字符。

类似这样的字符串:Name = "abcefghijklmnopqrstuvwxyz" + "_" + "zyxwvutsrqponmlkjihgfecba";

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

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


1
更好的做法是将DisplayName和UniqueName存储在不同的列中。 - Joel Coehoorn
4个回答

5

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


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

3
我写了一个扩展方法来完成这个任务:
public static string RemoveExcessCharacters(this string value, int maxLen)
{
   return (value.Length > maxLen) ? value.Substring(0, maxLen) : value;
}

使用方法:

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

返回 "abc"

3
假设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()返回恰好两部分,例如。

1
你可以利用 .Net 框架中提供的子字符串函数来处理 C# 相关内容,这将使您轻松地使用长度为 255 的字符串。
例如:
if(str.Length > 255)
{
  str = str.Substring(0, 255);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接