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

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(使用前将#替换为@)

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

  • 处理流星中的长服务器端计算

    我正在使用 jimp https www npmjs com package jimp https www npmjs com package jimp 在meteor JS中生成图像服务器端 换句话说 我正在使用递归算法 计算 图像的像素
  • 查找文本中所有关键字的有效算法

    我有很多字符串 其中包含许多不同拼写的文本 我通过搜索关键字来标记这些字符串 如果找到关键字 我将使用该关键字的关联文本 假设搜索字符串可以包含文本 schw schwa 和 施瓦茨 我有三个关键字 全部解析为文本 schwarz 现在我正
  • 填充体积算法

    我有一个具有一定尺寸长度 宽度 高度的盒子 我有不同长度 宽度 高度的物品 是否有现有的算法可以确定放入盒子中的最佳物品 这称为装箱 切割库存 背包问题 并且是 NP 难问题 一般来说 您只能通过使用启发式方法获得近似解 请参见示例 htt
  • 在 3d 网格中转发(绘制)线

    我需要类似 Bresenham 算法的东西 但是 对于 3d 网格空间来说不完全是这样 我需要 3d 单元网格 边缘尺寸 1 0 从 S 点开始 前进到 K 点 接触 该线接触的所有单元格 即使只有边缘 点被触摸我需要触摸所有 8 个单元
  • 序列和与 GCD

    大约一个月前 我在编程挑战中遇到了这个问题 但社论尚未发布 所以我在这里问 有一个大小为 N 的数组 A 求 A 的 K 个长度子序列的总和 GCD Example 如果 A 1 2 3 且 K 2 1 2 3 总和 1 GCD 3 1 3
  • 素数生成器算法

    我一直在尝试解决素数生成算法的SPOJ问题 这是问题 彼得想为他的密码系统生成一些素数 帮助 他 你的任务是生成两个给定之间的所有素数 数字 Input 输入以单行中测试用例的数量 t 开始 t Output 对于每个测试用例 打印所有素数
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • LRU算法,实现这个算法需要多少位?

    我有一个关于 LRU 算法的小问题 如果您有一个包含四个块的高速缓存 那么需要多少位来实现该算法 假设您指的是 4 路组关联缓存 完美 LRU 本质上是按照使用顺序为每一行分配一个精确的索引 您也可以将其视为 年龄 因此 4 个元素中的每一
  • 总和不小于 key 的数组的最小子集

    给定一个数组 假设为非负整数 我们需要找到最小长度子集 使得元素之和不小于 K K 是作为输入提供的另一个整数 是否有可能找到时间复杂度为 O n n 的大 oh 的解决方案 我目前的想法是这样的 我们可以在 O n log n 中对数组进
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto
  • 使用什么算法来确定使系统达到“零”状态所需的最小操作数?

    这是一种更通用的问题 不是特定于语言的 有关要使用的想法和算法的更多信息 系统如下 它登记朋友群体之间的小额贷款 Alice and Bill要去吃午饭 比尔的卡坏了 所以爱丽丝支付了他的餐费 10 美元 第二天Bill and Charl
  • 无法理解Peterson算法的正确性

    我在这里讨论彼得森算法的一个场景 flag 0 0 flag 1 0 turn P0 flag 0 1 turn 1 while flag 1 1 turn 1 busy wait
  • 连接红黑树

    OCaml 标准库有一个很棒的Set使用非常有效的分而治之算法来计算的实现union两套 我相信它会从一组中获取整个子树 而不仅仅是单个元素 并将它们插入到另一组中 并在必要时重新平衡 我想知道这是否需要 OCaml 使用的 AVL 树中保
  • 当满足动态条件时退出递归函数

    使用来自的函数生成汉明距离 t 内的所有比特序列 https stackoverflow com questions 40813022 generate all sequences of bits within hamming distan
  • 密文窃取算法 - 哪一种是正确的?

    网络上提出了两种算法 在这两种算法中 第一部分是相同的 1 Pad the last partial plaintext block with 0 2 Encrypt the whole padded plaintext using the
  • 添加边后更新最大流量

    考虑我们有一个网络流量 并使用 Edmond Karp 算法 我们已经拥有网络上的最大流量 现在 如果我们向网络添加任意边 具有一定容量 更新最大流量的最佳方法是什么 我正在考虑更新关于新边缘的残差网络 并再次寻找增强路径 直到找到新的最大
  • 寻找公共子集的算法

    I have N number of sets Si of Numbers each of a different size Let m1 m2 mn be the sizes of respective sets mi Si and M
  • 高度并行化的Levenshtein距离算法

    实际上 我必须实现一个字符串比较 最后得到匹配百分比 不仅仅是布尔结果匹配 不匹配 为此 我找到了 Levenstein 距离算法 但现在的问题是性能 例如 我有 1k 个字符串需要相互比较 现在大约需要 10 分钟 对于每个算法 我已经并
  • 使用递归返回嵌套列表中第二小的数字

    我必须归还第二小的使用递归的 python 列表中的数字 以及no loops 我所做的是创建一个辅助函数 它返回列表中 最小 第二小的 值的元组 然后我只取tuple 1 in my second smallest func def s
  • 最小化代表性整数的误差之和

    Given n integers between 0 10000 as D1 D2 Dn where there may be duplicates and n can be huge I want to find k distinct r

随机推荐

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