.NET C #에서 전체 단어의 문자열 자르기
C #에서 긴 텍스트를 자르려고하지만 문자열이 단어를 통해 부분적으로 잘리는 것을 원하지 않습니다. 누구든지 단어 끝에서 내 문자열을 자르는 데 사용할 수있는 기능이 있습니까?
예 :
"This was a long string..."
아니:
"This was a long st..."
다음을 시도하십시오. 꽤 초보적입니다. 원하는 길이에서 시작하는 첫 번째 공백을 찾습니다.
public static string TruncateAtWord(this string value, int length) {
if (value == null || value.Length < length || value.IndexOf(" ", length) == -1)
return value;
return value.Substring(0, value.IndexOf(" ", length));
}
답변 Dave에 감사드립니다. 나는 기능을 약간 조정했고 이것이 내가 사용하는 것입니다 ... 더 이상 주석이 없다면;)
public static string TruncateAtWord(this string input, int length)
{
if (input == null || input.Length < length)
return input;
int iNextSpace = input.LastIndexOf(" ", length, StringComparison.Ordinal);
return string.Format("{0}…", input.Substring(0, (iNextSpace > 0) ? iNextSpace : length).Trim());
}
내 기여 :
public static string TruncateAtWord(string text, int maxCharacters, string trailingStringIfTextCut = "…")
{
if (text == null || (text = text.Trim()).Length <= maxCharacters)
return text;
int trailLength = trailingStringIfTextCut.StartsWith("&") ? 1
: trailingStringIfTextCut.Length;
maxCharacters = maxCharacters - trailLength >= 0 ? maxCharacters - trailLength
: 0;
int pos = text.LastIndexOf(" ", maxCharacters);
if (pos >= 0)
return text.Substring(0, pos) + trailingStringIfTextCut;
return string.Empty;
}
이것은 선택적인 후행과 함께 내 프로젝트에서 사용하는 것입니다. 텍스트는 maxCharacters + 후행 텍스트 길이를 초과하지 않습니다.
Windows Forms를 사용하는 경우 Graphics.DrawString 메서드에는 지정된 영역에 맞지 않는 경우 문자열을자를 지 여부를 지정하는 StringFormat의 옵션이 있습니다. 필요한 경우 줄임표 추가를 처리합니다.
http://msdn.microsoft.com/en-us/library/system.drawing.stringtrimming.aspx
이 솔루션도 작동합니다 (myString에서 처음 10 개 단어 가져 오기).
String.Join(" ", myString.Split(' ').Take(10))
나는 당신의 접근 방식을 조금 더 취했습니다.
public string TruncateAtWord(string value, int length)
{
if (value == null || value.Trim().Length <= length)
return value;
int index = value.Trim().LastIndexOf(" ");
while ((index + 3) > length)
index = value.Substring(0, index).Trim().LastIndexOf(" ");
if (index > 0)
return value.Substring(0, index) + "...";
return value.Substring(0, length - 3) + "...";
}
트윗을 자르는 데 이것을 사용하고 있습니다.
단순화되고 트렁킹 문자 옵션이 추가되어 확장되었습니다.
public static string TruncateAtWord(this string value, int maxLength)
{
if (value == null || value.Trim().Length <= maxLength)
return value;
string ellipse = "...";
char[] truncateChars = new char[] { ' ', ',' };
int index = value.Trim().LastIndexOfAny(truncateChars);
while ((index + ellipse.Length) > maxLength)
index = value.Substring(0, index).Trim().LastIndexOfAny(truncateChars);
if (index > 0)
return value.Substring(0, index) + ellipse;
return value.Substring(0, maxLength - ellipse.Length) + ellipse;
}
여기에 내가 생각해 낸 것이 있습니다. 이것은 문장의 나머지 부분도 덩어리로 가져 오는 것입니다.
public static List<string> SplitTheSentenceAtWord(this string originalString, int length)
{
try
{
List<string> truncatedStrings = new List<string>();
if (originalString == null || originalString.Trim().Length <= length)
{
truncatedStrings.Add(originalString);
return truncatedStrings;
}
int index = originalString.Trim().LastIndexOf(" ");
while ((index + 3) > length)
index = originalString.Substring(0, index).Trim().LastIndexOf(" ");
if (index > 0)
{
string retValue = originalString.Substring(0, index) + "...";
truncatedStrings.Add(retValue);
string shortWord2 = originalString;
if (retValue.EndsWith("..."))
{
shortWord2 = retValue.Replace("...", "");
}
shortWord2 = originalString.Substring(shortWord2.Length);
if (shortWord2.Length > length) //truncate it further
{
List<string> retValues = SplitTheSentenceAtWord(shortWord2.TrimStart(), length);
truncatedStrings.AddRange(retValues);
}
else
{
truncatedStrings.Add(shortWord2.TrimStart());
}
return truncatedStrings;
}
var retVal_Last = originalString.Substring(0, length - 3);
truncatedStrings.Add(retVal_Last + "...");
if (originalString.Length > length)//truncate it further
{
string shortWord3 = originalString;
if (originalString.EndsWith("..."))
{
shortWord3 = originalString.Replace("...", "");
}
shortWord3 = originalString.Substring(retVal_Last.Length);
List<string> retValues = SplitTheSentenceAtWord(shortWord3.TrimStart(), length);
truncatedStrings.AddRange(retValues);
}
else
{
truncatedStrings.Add(retVal_Last + "...");
}
return truncatedStrings;
}
catch
{
return new List<string> { originalString };
}
}
나는 이것을 사용한다
public string Truncate(string content, int length)
{
try
{
return content.Substring(0,content.IndexOf(" ",length)) + "...";
}
catch
{
return content;
}
}
참고 URL : https://stackoverflow.com/questions/1613896/truncate-string-on-whole-words-in-net-c-sharp
'programing tip' 카테고리의 다른 글
파이썬에서 정확한 함수 타이밍 (0) | 2020.11.26 |
---|---|
C에서 char 문자열을 수정할 수 있습니까? (0) | 2020.11.26 |
Windows 7에서 git 사용 권한이 거부 됨 (공개 키) 오류 (0) | 2020.11.26 |
Maven에서 디버깅? (0) | 2020.11.26 |
ProgressDialog에서 진행률 표시기를 쉽게 중앙에 배치하는 방법 (제목 / 텍스트가 전달되지 않은 경우) (0) | 2020.11.26 |