最好的自动换行算法? [关闭]

2023-12-11

自动换行是现代文本编辑器的必备功能之一。

如何处理自动换行?最好的自动换行算法是什么?

如果文本有几百万行,如何才能快速自动换行?

为什么我需要解决方案?因为我的项目必须绘制具有各种缩放级别的文本,同时具有美观的外观。

运行环境为Windows Mobile设备。最大速度为 600 MHz,内存容量非常小。

我应该如何处理线路信息?我们假设原始数据有三行。

THIS IS LINE 1.
THIS IS LINE 2.
THIS IS LINE 3.

之后,中断文本将显示如下:

THIS IS
LINE 1.
THIS IS
LINE 2.
THIS IS
LINE 3.

我应该多分配三行吗?或者还有其他建议吗? ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­


这是我用 C# 编写的自动换行算法。
翻译成其他语言应该相当容易(也许除了IndexOfAny).

static char[] splitChars = new char[] { ' ', '-', '\t' };

private static string WordWrap(string str, int width)
{
    string[] words = Explode(str, splitChars);

    int curLineLength = 0;
    StringBuilder strBuilder = new StringBuilder();
    for(int i = 0; i < words.Length; i += 1)
    {
        string word = words[i];
        // If adding the new word to the current line would be too long,
        // then put it on a new line (and split it up if it's too long).
        if (curLineLength + word.Length > width)
        {
            // Only move down to a new line if we have text on the current line.
            // Avoids situation where
            // wrapped whitespace causes emptylines in text.
            if (curLineLength > 0)
            {
                strBuilder.Append(Environment.NewLine);
                curLineLength = 0;
            }

            // If the current word is too long
            // to fit on a line (even on its own),
            // then split the word up.
            while (word.Length > width)
            {
                strBuilder.Append(word.Substring(0, width - 1) + "-");
                word = word.Substring(width - 1);

                strBuilder.Append(Environment.NewLine);
            }

            // Remove leading whitespace from the word,
            // so the new line starts flush to the left.
            word = word.TrimStart();
        }
        strBuilder.Append(word);
        curLineLength += word.Length;
    }

    return strBuilder.ToString();
}

private static string[] Explode(string str, char[] splitChars)
{
    List<string> parts = new List<string>();
    int startIndex = 0;
    while (true)
    {
        int index = str.IndexOfAny(splitChars, startIndex);
        
        if (index == -1)
        {
            parts.Add(str.Substring(startIndex));
            return parts.ToArray();
        }

        string word = str.Substring(startIndex, index - startIndex);
        char nextChar = str.Substring(index, 1)[0];
        // Dashes and the like should stick to the word occuring before it.
        // Whitespace doesn't have to.
        if (char.IsWhiteSpace(nextChar))
        {
            parts.Add(word);
            parts.Add(nextChar.ToString());
        }
        else
        {
            parts.Add(word + nextChar);
        }

        startIndex = index + 1;
    }
}

它相当原始——它按空格、制表符和破折号进行分割。

它确实确保破折号粘在它之前的单词上 (所以你不会最终得到“堆栈
-溢出”), 虽然它不利于移动小连字符的单词 到一个新行而不是拆分它们。

如果单词对于一行来说太长,它确实会分割单词。

它也具有相当的文化特色, 因为我不太了解其他文化的自动换行规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最好的自动换行算法? [关闭] 的相关文章

  • 使用并集查找(又名不相交集)检测图是否是二分图

    我正在 Spoj 上做一个问题 基本上可以简化为检测图是否是二分图 我正在尝试使用 dfs 为图表着色 但它太慢了 有人评论这个 没有 bfs 没有 dfs 没有二部图 简单的并查集就可以做到 确实速度很快 提示 1 偶数长度的环不会影响两
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 给定一个具有多个重复条目的数组,找到一个重复条目 O(N) 时间和常数空间

    我们得到了一个大小为 N 的数组 其中包含 0 到 N 2 范围内的整数 包括 0 和 N 2 该数组可以有多个重复的条目 我们需要在 O N 时间和常量空间中找到重复条目之一 我正在考虑取数组中所有条目的乘积和总和 以及 0 到 N 2
  • 归并排序中递归树的高度log(n)+1是怎么来的

    我按照 stackoveflow 的建议阅读了一些问题和答案 我正在遵循 cormen 的 算法简介 一书进行自学 那本书里已经解释得很清楚了 但唯一没有解释的是如何在合并排序分析中计算树的高度 如果在后面的章节中对此进行解释的话 我仍然在
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • 二维滑动窗口最小值/最大值

    假设我们得到一个大小为 NxN 的像素整数矩阵和一个整数 k 窗口大小 我们需要使用滑动窗口找到矩阵中的所有局部最大值 或最小值 这意味着 如果某个像素与其周围窗口中的所有像素相比具有最小 最大 值 则应将其标记为最小 最大 有一种著名的滑
  • 有没有时间复杂度为O(N)的排序算法?

    大多数排序算法的复杂度为 O NN 或 O NlogN 来实现结果 但是 对于特定的输入集 有些算法的复杂度为 O N 我想知道是否有一种排序算法在所有情况下都具有 O N 的复杂度 如果您只能比较 检查两个项目是否为 正在排序的值 那么您
  • 使用到达时间差对信号进行三边测量

    我在寻找或实现寻找信号源的算法时遇到一些麻烦 我的工作目标是找到声音发射器的位置 为了实现这一点 我使用了三个麦克风 我正在使用的技术是多点定位这是基于到达时间差 The 到达时间差使用发现每个麦克风之间互相关接收到的信号 我已经实现了算法
  • 如何从 Trie 中检索给定长度的随机单词

    我有一个简单的 Trie 用来存储大约 80k 长度为 2 15 的单词 它非常适合检查字符串是否是单词 但是 现在我需要一种获取给定长度的随机单词的方法 换句话说 我需要 getRandomWord 5 来返回 5 个字母的单词 所有 5
  • 如何衡量字符串的复杂度?

    我有一些长字符串 1 000 000 个字符 每个字符串仅包含定义字母表中的符号 例如 A 1 2 3 示例字符串 string S1 1111111111 meta complexity 0 string S2 1111222333 me
  • 优化两个三位数乘积的最大回文数?

    我正在研究一个面试问题 我被问到这个问题 我应该编写一个程序 从两个三位数的乘积中找到最大的回文数 这里是question https projecteuler net problem 4 我想出了这种从底部开始的蛮力方法 public c
  • 查找一个二维矩阵是否是另一个二维矩阵的子集

    最近我参加了一个黑客马拉松 我了解到一个问题 试图在 2d 矩阵中找到网格形式的模式 模式可以是 U H 和 T 并由 3 3 矩阵表示 假设我想展示 H 和 U 1 0 1 1 0 1 1 1 1 gt H 1 0 1 gt U 1 0
  • 如何提高洪水填充例程的性能?

    我正在我的应用程序中实现四路洪水填充 伪代码如下 Flood fill node target color replacement color 1 If the color of node is not equal to target co
  • 基于 2 个输入的伪随机数生成器 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我需要根据 2 个输入值 X 和 Y 生成一个伪随机数 给定相同的 X 和 Y 值 我需要得到相同的结果 结果应介于 0 和 1 之间 含
  • 依次构建完整的 B 树

    如果我有一组排序的数据 我想以最适合顺序读取和随机查找的方式将其存储在磁盘上 那么 B 树 或其中一个变体 似乎是一个不错的选择 假设该数据集并不全部适合 RAM 问题是可以从一组排序的数据构建完整的 B 树而不进行任何页面拆分吗 这样排序
  • 机器人探索算法

    我正在尝试为机器人设计一种算法 试图找到位于未知位置的旗帜 该旗帜位于一个包含障碍物的世界中 机器人的任务是夺取旗帜并将其带到他的基地 代表他的起始位置 机器人在每一步只能看到有限的邻域 他事先不知道世界是什么样子 但他有无限的内存来存储已
  • 将数字的各个数字部分相加/求和的最快方法

    不久前 我在数学论坛上看到一个问题 其中一个人正在讨论一遍又一遍地将数字中的数字相加 直到达到个位数 即 362 将变成 3 6 2 这将变成 11 然后 11 将变成 1 1 将变成 2 因此 362 将返回2 我写了一些很好的代码来得到
  • TextBlock TextWrapping 不换行 #2

    好吧 那么this https stackoverflow com questions 6625177 textblock textwrapping not wrapping解决方案没有帮助 XAML 在这里

随机推荐

  • 双向 WeakMap 保持对象存活?

    假设我有两个 WeakMap a2b new WeakMap
  • java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.addAnnotatedClass

    当我尝试这个时 我是 JPA 和 hibernate 的新手tutorial 我在 persistence xml 中添加了以下提供程序
  • 类型不匹配无法从元素类型对象转换为字符串

    在我的代码中创建搜索方法来搜索字符串时 我不断收到此错误 我已经通过很多例子试图解决这个问题 但我找不到任何例子 感谢您提供的任何帮助和建议 public class runNote public static void main Stri
  • 尝试针对 ManagementObjectNotFoundException 和 ActiveDirectory/Outlook 进行 Catch/Exception

    这可能是一个非常基本的问题 但我还没有在表格上看到它 请耐心等待 我是 powershell 新手 当我们的 Active Directory 数据库中找不到用户名时 我试图捕获此异常 ManagementObjectNotFoundExc
  • 如何使用 Selenium 允许位置访问?

    我试图在Java中使用Selenium来获取用户的地理坐标 但是使用IP地址不够准确 所以我想使用这个网站http www whataremycooperatives com 但它不起作用 我猜这是因为你必须允许位置使用 所以无论如何我可以
  • 是什么导致了“Base-64 字符数组的长度无效”

    我在这里没什么可说的 我无法在本地重现此问题 但是当用户收到错误时 我会收到自动电子邮件异常通知 Invalid length for a Base 64 char array at System Convert FromBase64Str
  • 为什么spring-boot-starter项目的github项目是空的?

    看着spring boot 启动器 web spring boot starter 安全性github 上的项目 我发现它们是空的 只有一个 build gradle 文件存在 我希望这符合预期 但这让我了解在哪里可以找到实际的源代码 而且
  • 将消息定向给消费者

    我的客户端正在尝试向接收者发送消息 但是我注意到接收者有时没有收到客户端发送的所有消息 因此丢失了一些消息 不确定问题出在哪里 客户端还是接收者 关于为什么会发生这种情况的任何建议 这就是我目前正在做的事情 在接收方 这就是我正在做的事情
  • 如何实现自定义类型的xml序列化?

    我有一些类型想要序列化 反序列化并根据所选对象生成 UI UI 还将更改对象 而我必须序列化该对象才能将其存储在我的应用程序中 So obj apple stored in the app gt select obj apple gt de
  • 显示“数字存储为文本”错误

    我正在使用带有 0 和 1 的高级过滤器等 仅当数据表中包含 1 和 0 的单元格显示错误消息 数字存储为文本 时 过滤器才能正常工作 为此 我必须双击并按 Enter 键手动打开单元格 然后出现错误消息并且过滤器开始工作 如果我不这样做
  • 为企业客户在 MRI Ruby / JRuby 上混淆 Rails 应用程序 [重复]

    这个问题在这里已经有答案了 对于将在其服务器上运行我们的 Rails 应用程序的企业客户 我们不想向他们提供 Rails 应用程序的源代码 使用 MRI Ruby 甚至 JRuby 是否可以 混淆源代码 如果是 JRuby 请将 Rails
  • 可变参数柯里求和函数

    我需要一个 js sum 函数来工作 如下所示 sum 1 2 3 sum 1 2 3 6 sum 1 2 3 4 10 etc 听说做不到但听说如果添加 在 前面sum可以做到 喜欢 sum 1 2 3 4 关于如何做到这一点有什么想法吗
  • MVVMCross iOS:切换到不同视图模型时如何将命令与自定义转换绑定

    对于MVVMCross ios 如何使用不同的TransitionalStyle 例如FlipHorizo ntal样式 而不是 ShowViewModel 的默认滑动效果 Register SearchResults public cla
  • 如何使用php和sql服务器在网页中显示阿拉伯字符

    如何使用 php 和 sql server 在网页中显示阿拉伯字符 阿拉伯语数据存储在数据库 sql server 中 现在我想使用php在网页上显示该数据 我怎样才能做到这一点 mssql 与 php 中的 Unicode 官方解决方案
  • 获取 Facebook 点赞数

    我已将 Facebook Like 集成到我的网站中 现在我需要在我网站的管理面板中获取 列出 Facebook Like 的计数 有什么办法可以完成这个任务吗 需要建议 提前致谢 url http graph facebook com P
  • YouTube API - 按用户名查询不会返回频道品牌设置

    使用 YouTube API v3 查询频道的品牌设置时 为什么按频道 ID 查询会返回这些设置 而按用户名查询则不会返回 API 不会返回按用户名进行频道列表查询的品牌设置 如果您通过频道 ID 查询频道的品牌设置 例如 id UC8 T
  • 如何跳过 YouTube 播放列表嵌入中的私人视频

    我们使用以下代码将最新的 YouTube 视频嵌入到我们的播放列表之一 我们已将视频排队等待明天上线 但现在我们的网站显示 视频不可用 视频私有 错误 我们检查了 API 但我没有看到任何会跳过私人视频的playerVars 知道如何获取基
  • 如果检测到匹配的文件,则运行 pre-commit.com 挂钩一次(并非针对每个文件)

    我有一个钩子 可以从源文件生成文档文件 使用pre commit com 框架 在该挂钩中调用的函数没有文件参数 因此它只是为目录中的所有源文件创建文档 钩子是一个systemhook 即只是一个 bash 脚本 我在其中调用该函数来创建文
  • matplotlib qt imshow animate [重复]

    这个问题在这里已经有答案了 imshow 动画可以与 qt 后端一起使用吗 以下在非 qt 中工作正常 但不使用 qt 制作动画 只显示最后一帧 img standard normal 40 40 image imshow img inte
  • 最好的自动换行算法? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 自动换行是现代文本编辑器的必备功能之一 如何处理自动换行 最好的自动换行算法是什么 如果文本有几百万行 如何才能快速自动换行 为什么我需要解决方案 因为我的项目必须绘制具有各种缩放级别的文