C#의 일부 긴 텍스트를 잘라내려고하고 있지만 단어를 부분적으로 잘라 내고 싶지 않습니다. 누구든지 단어의 끝에 내 문자열을자를 수있는 함수가 있습니까?.NET에서 전체 단어의 문자열을 자릅니다. C#
예컨대 :
"This was a long string..."
하지 :
"This was a long st..."
C#의 일부 긴 텍스트를 잘라내려고하고 있지만 단어를 부분적으로 잘라 내고 싶지 않습니다. 누구든지 단어의 끝에 내 문자열을자를 수있는 함수가 있습니까?.NET에서 전체 단어의 문자열을 자릅니다. C#
예컨대 :
"This was a long string..."
하지 :
"This was a long st..."
감사합니다. 나는 기능을 조금 쥐게했고 더 이상 설명이 존재하지 않는 한이 내가 ... 사용하고 무엇을)
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());
}
이것에 더하여,이 HTML 태그 내에서 (RegEx를 사용하여) 다른 문자열 유틸리티 함수를 호출하고 있습니다. 이렇게하면 모든 문자열이 일반 텍스트 형식이므로 잘 리면 HTML이 손상 될 위험이 최소화됩니다. – TimS
이 메서드는 지정된 길이 값보다 * 첫 번째 공백을 찾습니다. 거의 항상 결과 문자열을 값보다 길게 만듭니다. 길이 앞에있는 마지막 공간을 찾으려면 단순히'iNextSpace'를 계산할 때'input.LastIndexOf ("", length)'를 대체하십시오. – CBono
CBono의 의견에 대해 +100 - 이전이어야합니다! 이 길이만큼이나 긴 길이의 긴장이 계속되는 동안 당신의 길이는 길어집니다! – Jason
는 다음을보십시오. 꽤 초보적입니다. 그냥 원하는 길이로 시작하는 첫 번째 공간을 찾습니다.
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));
}
당신이 Graphics.DrawString 방법에서, 문자열을 절약 할 수있는 경우는 지정된 영역에 맞지 않는 경우, 지정할 수있는 StringFormat의 옵션이 있습니다, 윈도우 폼을 사용하는 경우. 필요한 경우 줄임표 추가를 처리합니다. 답변 데이브에 대한
http://msdn.microsoft.com/en-us/library/system.drawing.stringtrimming.aspx
이것은 ASP.Net 페이지 용이지만, 알아두면 좋은 Win Forms 자료를 제공합니다! – TimS
나는 조금 더 당신의 접근 방식에 나섭니다 :
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) + "...";
}
I을 트윗을 자르기 위해 이것을 사용합니다.
내 기여 :
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 + 텍스트 길이를 초과하지 않습니다.
+1; :) – manudea
단순화되고 트렁킹 문자 옵션이 추가되어 확장되었습니다.
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;
}
이것은 의도 한대로 작동하지 않습니다. 여기에 아무것도 게시하기 전에 최소한 정신 테스트를하십시오. – avs099
나는 내가 생각 해낸 Heres는 무엇을이
public string Truncate(string content, int length)
{
try
{
return content.Substring(0,content.IndexOf(" ",length)) + "...";
}
catch
{
return content;
}
}
사용합니다. 이것은 문장의 나머지 부분을 청크로 가져 오는 것입니다. 이 솔루션은 너무 작동
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 };
}
}
은 (MyString의에서 처음으로 10 개 단어 소요) :
String.Join(" ", myString.Split(' ').Take(10))
당신은 절단을 위해 현재의 솔루션을 제공 할 수? – pyrocumulus
@Cloud Just.Substring (0,) –
TimS