C# 字符串与整数分开(字体名称与字体大小分开)

C# 字符串与整数分开(字体名称与字体大小分开),c#,string,fonts,C#,String,Fonts,我有一个fontname属性,它返回fontname+SPACE+fontsize,例如:Sans 12,但是要创建字体对象,我需要分别使用字体名和字体大小。我希望字体的名称中没有数字 所以,我在寻找一种方法,把这根绳子分成两部分 这应该能满足您的需求: var yourString = "SAN 1 12"; var lastSpace = yourString.LastIndexOf( ' ' ); var fontName = yourString.Substring( 0, lastSp

我有一个fontname属性,它返回fontname+SPACE+fontsize,例如:
Sans 12
,但是要创建字体对象,我需要分别使用字体名和字体大小。我希望字体的名称中没有数字


所以,我在寻找一种方法,把这根绳子分成两部分

这应该能满足您的需求:

var yourString = "SAN 1 12";
var lastSpace = yourString.LastIndexOf( ' ' );
var fontName = yourString.Substring( 0, lastSpace ); //gives SAN 1
var fontSize = yourString.Substring( lastSpace ).Trim(); //gives 12

这将为您提供您需要的:

var yourString = "SAN 1 12";
var lastSpace = yourString.LastIndexOf( ' ' );
var fontName = yourString.Substring( 0, lastSpace ); //gives SAN 1
var fontSize = yourString.Substring( lastSpace ).Trim(); //gives 12

假设该属性返回类似“Some Font2 With 5 Variants 24”的内容,则可以执行以下操作:

   //fontProperty="Some Font2 With 5 Variants 24"

   string fontNamePart=fontProperty.Substring(0,fontProperty.LastIndexOf(' '));
   int fontSize=int.Parse(fontProperty.Substring(fontProperty.LastIndexOf(' ')+1));
要使大小部分成为“空白字符证明”,以便可以安全地将其转换为int,您可以在转换之前对其进行额外的修剪。像这样:

   int fontSize=int.Parse(fontProperty.Substring(fontProperty.LastIndexOf(' ')+1).Trim());// I know, looks a bit ugly

这适用于任何类型的字体,前提是最后一部分始终是字体的大小。

假设属性返回类似“Some Font2 With 5 Variants 24”,则可以执行以下操作:

   //fontProperty="Some Font2 With 5 Variants 24"

   string fontNamePart=fontProperty.Substring(0,fontProperty.LastIndexOf(' '));
   int fontSize=int.Parse(fontProperty.Substring(fontProperty.LastIndexOf(' ')+1));
要使大小部分成为“空白字符证明”,以便可以安全地将其转换为int,您可以在转换之前对其进行额外的修剪。像这样:

   int fontSize=int.Parse(fontProperty.Substring(fontProperty.LastIndexOf(' ')+1).Trim());// I know, looks a bit ugly


这应该适用于任何类型的字体,前提是最后一部分始终是字体的大小。

您是否检查过字符串是否有允许“将字符串拆分为两部分”的方法
Split
?@AlexeiLevenkov是的,我知道,但在哪里拆分,就像fontname可以有空格一样,我不确定fontname是否有数字你真的应该澄清限制。。。如果末尾始终有空格+大小,则基本
LastIndexOf
可以。。。但是要小心这样的字体名称-:)@AlexeiLevenkov是的,有这样的字体。fontsize最多限制为3个字符。我可以从数组末尾开始,然后倒计时,直到遇到空格。这种方法有问题吗。手动实现
LastIndexOf
很奇怪,但确实是一个选项。。。无论如何,bit已经在答案中为您提供了代码。您是否检查过string是否有允许“将此字符串拆分为两部分”的方法
Split
?@AlexeiLevenkov是的,我知道,但在哪里拆分,比如fontname可以有空格,我不确定fontname是否有数字。您真的应该澄清限制。。。如果末尾始终有空格+大小,则基本
LastIndexOf
可以。。。但是要小心这样的字体名称-:)@AlexeiLevenkov是的,有这样的字体。fontsize最多限制为3个字符。我可以从数组末尾开始,然后倒计时,直到遇到空格。这种方法有问题吗。手动实现
LastIndexOf
很奇怪,但确实是一个选项。。。无论如何,bit已经在答案中为您提供了代码。感谢您的回答,但这将适用于评论中提到的AlexeiLevenkov字体。请参阅上面的评论。fontsize最多限制为3个字符。我可以从数组末尾开始,然后倒计时,直到遇到空格。这种方法是否有效问题。如果字体为“PR漩涡10”且假定大小为“99”,则字符串将为“PR漩涡10 99”,代码仍然有效。在获取大小时抛出错误。“索引必须引用字符串中的位置”我没有真正测试代码,你介意调试一下吗?谢谢你的回答,但是这对评论中提到的AlexeiLevenkov这样的字体有效吗?请看上面的评论。fontsize最多限制为3个字符。我可以从数组的末尾开始,倒计时,直到遇到空格。这种方法有问题吗。字体“PR漩涡10”并假定大小为“99”,您的字符串将为“PR漩涡10 99”,代码仍然有效。在获取大小的位置会抛出错误。“索引必须引用字符串中的某个位置。”“我还没有真正测试代码,你介意调试一下吗?谢谢,但是fontNamePart遗漏了最后一个字符。是的,我更正了它。这是我考试申请中的一个打字错误。只需要从第一行删除-1。您可以在控制台应用程序中检查此代码<代码>字符串fontProperty=“带有5个变体的某些Font2 24”;字符串fontPart=fontProperty.Substring(0,fontProperty.LastIndexOf(“”));int size=int.Parse(fontProperty.Substring(fontProperty.LastIndexOf(“”)+1));WriteLine(“{0}{1}”,fontPart,size);Console.Read()谢谢,但是fontNamePart漏掉了最后一个字符。是的,我改正了。这是我考试申请中的一个打字错误。只需要从第一行删除-1。您可以在控制台应用程序中检查此代码<代码>字符串fontProperty=“带有5个变体的某些Font2 24”;字符串fontPart=fontProperty.Substring(0,fontProperty.LastIndexOf(“”));int size=int.Parse(fontProperty.Substring(fontProperty.LastIndexOf(“”)+1));WriteLine(“{0}{1}”,fontPart,size);Console.Read()