C# 在字符串中创建下标

2024-07-04

目前我正在尝试修复我的应用程序中的一些格式。我正在尝试下标string并将其附加到正常的string- 与在 MS Word 中执行的操作相同。我已经尝试过这个(正如假设的那样here https://en.wikipedia.org/wiki/Superscripts_and_Subscripts and here https://stackoverflow.com/questions/17704169/how-to-write-superscript-in-a-string-and-display-using-messagebox-show):

string temp = "NormalText";
foreach( char t in "SubscriptedText".ToCharArray())
    temp += "\x208" + t;

MessageBox.Show(temp);

Output: NormalTextȈSȈuȈbȈsȈcȈrȈiȈpȈtȈeȈdȈTȈeȈxȈt

但是,正如我后来指出的,字体必须支持 unicode 定义。并且在互联网上似乎没有一种字体支持所有上标格式的字母。

那么,有没有办法格式化我的文本以便为其后半部分添加下标?也许我缺少一个简单的功能?或者这是不可能的,我必须自己对齐我的下标文本?

EDIT还尝试过这个:

string temp = "NormalText";
foreach( char t in "SubscriptedText".ToCharArray())
    temp += "\x208" + (int)t;

MessageBox.Show(temp);

但是(当然)这根本没有成功。我的输出如下所示:

NormalTextȈ84Ȉ105Ȉ101Ȉ102Ȉ101Ȉ114Ȉ84Ȉ101Ȉ120Ȉ11


首先,可用于订阅的符号数量有限。有这些符号:

1 - '\u2081'
2-  '\u2082'
3-  '\u2083'
...
9 - '\u2089'
+ - '\u208A'
- - '\u208B'
= - '\u208C'
( - '\u208D'
) - '\u208E'

就这样。所以你不能像“SubscriptedText”那样为字符串添加下标。

如果您想将某些数字或允许的符号转换为订阅,您可以尝试以下方式:

void ShowSubText()
    {
        String inputString = "NormalText";
        var nonDigitSymbolsTable = new Dictionary<char, char>();
        nonDigitSymbolsTable.Add('+', 'A');
        nonDigitSymbolsTable.Add('-', 'B');
        nonDigitSymbolsTable.Add('=', 'C');
        nonDigitSymbolsTable.Add('(', 'D');
        nonDigitSymbolsTable.Add(')', 'E');
        StringBuilder temp = new StringBuilder();
        int checkToDigit = 0;
        foreach (char t in "1234567890+-=()".ToCharArray())
        {
            if (int.TryParse(t.ToString(), out checkToDigit))
                temp.Append("\\u208" + t);
            else
                temp.Append("\\u208" + nonDigitSymbolsTable[t]);
        }

        MessageBox.Show(inputString + GetStringFromUnicodeSymbols(temp.ToString()));
    }
    string GetStringFromUnicodeSymbols(string unicodeString)
    {
        var stringBuilder = new StringBuilder();
        foreach (Match match in Regex.Matches(unicodeString, @"\\u(?<Value>[a-zA-Z0-9]{4})"))
        {
            stringBuilder.AppendFormat(@"{0}",
                                       (Char)int.Parse(match.Groups["Value"].Value,System.Globalization.NumberStyles.HexNumber));
        }

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

C# 在字符串中创建下标 的相关文章

  • C#:秒到分钟到小时的转换?

    好吧 首先 我很确定我不会在这项作业中使用 TimeSpan 相反 当用户在文本框中输入秒数时 它会在消息框中显示秒 分钟和小时的公式系列 这就是我被困住的地方 我们应该用这个例子来检查我们的答案 7565 秒是 2 小时 6 分 5 秒
  • VSTO 功能区库,看起来像 Word 2010 中的样式选择器

    我正在用 C 编写功能区 COM 加载项 并尝试在新选项卡上创建可用模板文件库 是否可以将图库设置为像 Word ie 中主页选项卡上的样式选择器图库一样打开 显示图库中的所有文件名 MS 不允许其他人使用带内画廊在 Outlook 200
  • 哪个STL容器具有线程安全的插入过程?

    哪个STL容器具有线程安全的插入过程 我希望多个线程同时插入同一个容器中 欢迎除 STL 即 Boost 之外的任何实现 STL 容器不是线程安全的 如果您愿意的话 您必须通过自己的同步来强加这一点
  • 在 C++ 中访问静态类变量?

    复制 C 对静态类成员的未定义引用 https stackoverflow com questions 272900 c undefined reference to static class member 如果我有这样的类 结构 head
  • 将指针转换为64位整数,为什么在32位和64位平台上结果不同

    我有一个这样的代码片段 up cpp include
  • 如何检测动态绘制图形的点击?

    我正在面板上绘制文件和文件夹名称列表 并试图集体讨论检测用户是否单击文件 文件夹名称以及何时单击文件 文件夹名称以及他们实际单击的文件或文件夹名称的最佳方法 以下是我迄今为止编写的方法 我的第一个想法是用透明控件搭载每段文本 并以这种方式动
  • 尝试访问 USB 设备时出现 RPC_E_CANTCALLOUT_ININPUTSYNCCALL

    我有这段代码 var searcher new ManagementObjectSearcher root CIMV2 SELECT FROM Win32 DiskDrive foreach var queryObj in searcher
  • 与对象的互斥体

    我试图了解如何在 C 中将互斥体与对象一起使用 我有以下 简单的 多线程代码用作速度测试 struct Rope int n steps offset std mutex mut Rope Rope int n int steps int
  • 迁移到新 csproj 格式的 WPF 应用程序上未定义 RunCommand 属性

    我正在尝试将旧 csproj 格式构建的 WPF 应用程序迁移到为 VS2017 定义的新 csproj 格式 我已经能够编译该应用程序 但是当我尝试在 VS2017 下的调试器中启动它时 我收到以下错误消息 无法运行您的项目 未定义 Ru
  • 在 Xamarin.Forms 中添加方向更改布局

    我需要实现的是 在将屏幕从纵向更改为横向时向现有页面添加布局 我已经成功地使用检测方向变化void OnSizeAllocation 双倍宽度 双倍高度 但我无法为此事件添加布局 我的示例 C 代码是 public class MyLayo
  • 无堆栈协程与堆栈协程有何不同?

    背景 我问这个问题是因为我目前有一个具有许多 数百到数千 线程的应用程序 这些线程中的大多数在很大一部分时间内处于空闲状态 等待将工作项放入队列中 当工作项可用时 它会通过调用一些任意复杂的现有代码来处理 在某些操作系统配置上 应用程序会遇
  • 如何将 char 指针转换为 int 指针

    我想投射一个指针pc它将 char 指向一个点pi它指向 int char pc int pi pi int pc compiler complaint about old style cast pi static cast
  • 如何解决有关 TcpListener: 请使用 TcpListener(IPAddress localaddr, int port) 的警告?

    我创建了一个新表单 在顶部我做了 using System using System Collections Generic using System ComponentModel using System Data using Syste
  • SQL 和 Dapper 性能隐式转换

    我们如何防止 Dapper 中的 SQL 隐式转换 我们意识到 我们正在进行 SQL 隐式转换 导致索引扫描和死锁 Dapper 参数是 nvarchar 而 SQL 表列是 varchar 这导致我们所有的 sql 列都转换为 nvarc
  • 鱼眼图像不失真的正确方法

    我已经完成了一些示例程序 可以消除棋盘上的镜头失真 如鱼眼图像 并且工作正常 这是屏幕截图 接下来 我想使用鱼眼棋盘图案 上右图 来消除相同的镜头畸变 但从真实图像中去除 但没有运气 曲率仍然保留在未畸变的图像上 因此我得到了这个 the
  • 在 JavaScript 中将数字转换为字符串,而不从数字中添加尾随零

    我尝试使用 toString 在 JavaScript 中将数字转换为字符串 但它会截断数字中无关紧要的零 举些例子 var n1 250 00 var n2 599 0 var n3 056 0 n1 toString yields 25
  • 基于路由参数的子容器注册

    我们有一个多租户 ASP NET MVC 应用程序 为多个客户端托管预订引擎 这些客户端中的每一个都有多个可以影响 Unity 容器配置的包 我们为每个请求创建一个子容器 并根据通过路由传递的客户端和包参数注册不同的接口实现 目前 我们正在
  • ncurses 和curses - 编译器未定义的引用

    好吧 我最初一直在尝试使用一些据称仅适用于 Windows 的标头 我的错 但我已经使用curses h 重现了我需要的内容 但是我仍然收到完全相同的错误 usr bin gmake f nbproject Makefile Debug m
  • 如何等待进程及其所有子进程退出?

    是否有一个等待方法 当目标进程及其所有子进程退出时会返回 看来 Process WaitForExit 只会等待目标进程 net 中有一个错误会给出您所追求的行为 WaitForExit 如果您异步读取输出 将等待所有子进程 p Start
  • Windows 窗体应用程序中异常处理的最佳实践?

    我目前正在编写我的第一个 Windows 窗体应用程序 我现在已经阅读了几本 C 书籍 因此对 C 必须处理异常的语言特性有了相对较好的了解 然而 它们都非常理论化 因此我还没有了解如何将基本概念转化为应用程序中良好的异常处理模型 有人愿意

随机推荐