【问题标题】:Split long string in multi lines in C#在 C# 中将长字符串拆分为多行
【发布时间】:2021-07-08 15:14:17
【问题描述】:

我正在从 Dynamics CRM 获取数据,并且某些字段属于多行文本类型。

我只能使用 en.GetAttributeValue<string>("multiline_field_name") 将它们作为字符串读取。

我的问题是我在 HTML 标记中呈现所述字符串并且某些单词中断。

例如

container div
************************
This is a very long stri
ng. Any help would be ve
ry much appreciated.
************************

我的容器元素只能包含超过 100 个字符,所以我想我会在每 100 个字符处断开字符串。

这是我的代码:

    private string SplitOnNewLine(string str)
    {
    
       StringBuilder sb = new StringBuilder();
    
       int splitOnIndex = 100;
       int cnt = 1;
    
       for(int i = 0; i <str.Length; i++)
       {
          if(i % splitOnIndex == 0 && i != 0)
          {
              if(str[i] == ' ')
              {
                  sb.Insert(i, "<br>");
              }
              else
              {
                  // Go backwards until space is found and append line break
    
                  int copied = splitOnIndex * cnt;
                  if (copied >= str.Length) break;
    
                   do
                   {
                      copied--;
                      if(str[copied] == ' ')
                      {
                         sb.Insert(copied, "<br>");
                         break;
                      }
                   }while (str[copied] != ' ');
               }
               cnt++;
            }
            else
            {
                sb.Append(str[i]);
            }
       }          
       return sb.ToString();
}

它仍然无法按预期工作。 我希望是这样的:

container div
************************
This is a very long 
string. Any help would 
be very much 
appreciated.
************************

附:我也尝试过使用分词和自动换行 CSS 规则,但无济于事。

【问题讨论】:

  • 在空间上拆分并检查当前行是否适合更多块不是更简单吗?
  • 能否请您添加您当前呈现的 HTML?我希望 CSS 应该能够处理这个问题。
  • 我在
  • 标签内渲染它。未应用任何 CSS 规则

标签: c# dynamics-crm word-break


【解决方案1】:

如何在每 100 个字符后分成两个字符串,例如反向查找' ' 并像你已经做的那样对字符串的第二部分进行递归。

string output = "";
        
for(int i = 0; i < input.Length; )
{
     string part = input.Substring( i, ( input.Length - i < 100 )? input.Length - i : 100 );

     if ( part.Length < 100 )
     {
         output += "<br>";
         output += input.Substring( i ).TrimStart();
         break;
     }
     else
     { 
         int lastSpaceInLine =  part.LastIndexOf( ' ' );

         if ( i != 0 )
              output += "<br>";

         output += input.Substring( i, lastSpaceInLine ).TrimStart();
         i += lastSpaceInLine;
      }
 }

好的,现在我有机会检查代码... 现在它按预期进行......

【讨论】:

  • 这会导致无限循环
  • 对不起,我错过了……但现在我编辑了代码……
猜你喜欢
相关资源
最近更新 更多
热门标签