我有字符串「H20」(水的化學分子式)。我想改變它,以便字符串中的所有數字都很小(數字2將是字母H旁邊的小索引)。我怎樣才能做到這一點?C#將字符串更改爲字符串中的小索引
回答
假設你有顯示標Unicode字符的方式,你可以很容易地編寫自己的擴展方法爲下標:
public static string Subscript(this string normal)
{
if(normal == null) return normal;
var res = new StringBuilder();
foreach(var c in normal)
{
char c1 = c;
// I'm not quite sure if char.IsDigit(c) returns true for, for example, '³',
// so I'm using the safe approach here
if (c >= '0' && c <= '9')
{
// 0x208x is the unicode offset of the subscripted number characters
c1 = (char)(c - '0' + 0x2080);
}
res.Append(c1);
}
return res.ToString();
}
IsDigit不僅返回0到9,而且還返回許多其他數字,因此您的警告方法在此處是必需的。這包括全角數字和來自其他文化的數字。 – CodesInChaos
@CodeInChaos:我已經這麼想過了。感謝您的澄清。 – Nuffin
'³'不會與'(c> ='0'&& c <='9')'匹配。 IsDigit可能會做得更好。 –
正如在評論中已經指出的那樣,你通常應該使用一些演示這種格式化技術。
<span>H<sub>2</sub>O</span>
然而,對於Unicode的,你可以利用的十六進制字符分配superscripts and subscripts block:例如,在HTML中,您可以通過顯示文本。由於統一在.NET原生支持,其中包括字符串常量內,您可以直接使用您所需的字符:
text = text.Replace("H2O", "H₂O");
注意:使用Unicode標字符將保證您的H₂O
字符串將在任何Unicode正確地呈現意識到應用程序,無論其格式化技術(HTML,RTF,PDF,XPS等)。
下面是一個屏幕截圖,顯示了字符串在Windows窗體下如何呈現TextBox
。爲了提高可讀性,字體已更改爲11.25pt的Cambria。
編輯:如果你想將所有的數字(不只是2
爲₂
),你可以使用@ Tobias的代碼。這是一個正則表達式的改編。由於我認爲所有要下標的數字都必須以字母開頭,所以我包含了一個逆序。
text = Regex.Replace(text, @"(?<=[A-Za-z])\d",
match => ((char)(match.Value[0] - '0' + '₀')).ToString());
以上將改變像
CF3CH2Cl + Br2 → CF3CHBrCl + HBr
字符串轉換成
CF₃CH₂Cl + Br₂ → CF₃CHBrCl + HBr
- 1. 在C++中將字符串劃分爲更小的字符串
- 2. C++:通過索引更改字符串
- 3. 更改字符串中的Python索引
- 4. 更改字符串中的索引
- 5. 將+更改爲&in搜索字符串
- 6. 如何將VSS中的==字符串更改爲eq(字符串)?
- 7. 將「列表格式」中的字符串更改爲字符串
- 8. C#將字符串更改爲新值
- 9. 作爲字符的索引字符串
- 10. C++索引TCHAR字符串
- 11. 將字符串壓縮爲更小的字符串?
- 12. 將IBAN字符串的類型更改爲字符串
- 13. matlab在字符串中將大寫字符更改爲小寫字符
- 14. 更改C中字符串的字體#
- 15. 如何打印出字符串索引字符串中字符串的字符
- 16. Ansi C - 將字符串轉換爲小寫字符串
- 17. 更改字符串值。 C#
- 18. 索引字符串?
- 19. 字符串索引
- 20. 索引字符串
- 21. 將字符串變量從字符串更改爲int
- 22. 將字符串類型日期更改爲日期字符串
- 23. 分割字符串並將字符串更改爲雙倍
- 24. C++中的字符串和索引
- 25. hw搜索索引字符串列表中的子字符串?
- 26. 將字符串插入給定索引的字符串
- 27. 如何將字符串更改爲C++中的多字符文字?
- 28. 更改爲字符串
- 29. 字符串更改爲空
- 30. 如何在C++中將字符串更改爲int數字?
是你的工作是什麼樣的應用 - ASP.NET,WinForms的,WPF,Silverlight中的Windows Phone, XBox 360,Zune,Windows 8 Metro風格,...?你在哪裏/如何顯示這些字符串? C#是一種編程語言。不是演示,這是你想在這裏實現的,所以你的問題沒有正確標記。 –
這是一個桌面應用程序只是爲了獲取數據。無所謂我在那裏顯示數據。然後我將這些數據發送到PHP服務器,然後發送到Android手機。 – Ales
桌面應用程序,你的意思是WinForms或WPF?當然,這很重要你如何顯示數據。這就是你現在的問題:正確顯示數據。 –