使用字符串格式在字符串中插入空格

本文关键字:字符串 插入 空格 格式 | 更新日期: 2023-09-27 18:25:51

我一直在使用C#字符串。格式化数字的格式以前是这样的(在这个例子中,我只想插入一个空格):

String.Format("{0:### ###}", 123456);

输出:

"123 456"

在这种特殊情况下,数字是一个字符串。我的第一个想法是简单地将其解析为一个数字,但这在上下文中毫无意义,必须有一种更漂亮的方法。

以下不起作用,因为##正在查找数字

String.Format("{0:### ###}", "123456");

输出:

"123456"

格式化时与#等效的字符串是什么?String.Format的神奇之处对我来说还是相当新鲜的。

使用字符串格式在字符串中插入空格

正如Heinzi所指出的,字符串参数不能有格式说明符。

因此,您可以使用以下内容来代替String.Format:

string myNum="123456";
myNum=myNum.Insert(3," ");

您必须首先将字符串解析为数字。

int number = int.Parse("123456");
String.Format("{0:### ###}", number);

当然,你也可以使用字符串方法,但它不那么可靠,也不那么安全:

string strNumber =  "123456";
String.Format("{0} {1}", strNumber.Remove(3), strNumber.Substring(3));

不是很漂亮,额外的工作量可能会超过收益,但如果输入是该格式的字符串,则可以执行:

var str = "123456";
var result = String.Format("{0} {1}", str.Substring(0,3), str.Substring(3));

string不是IFormattable

Console.WriteLine("123456" is IFormattable); // False
Console.WriteLine(21321 is IFormattable); // True

如果参数不是IFormattable,则没有必要提供格式。唯一的方法是将字符串转换为intlong

我们正在进行字符串操作,因此我们可以始终使用正则表达式。

略有改动:

class MyClass
{
   static void Main(string[] args)
   {
      string sInput, sRegex;
      // The string to search.
      sInput = "123456789";
      // The regular expression.
      sRegex = "[0-9][0-9][0-9]";
      Regex r = new Regex(sRegex);
      MyClass c = new MyClass();
      // Assign the replace method to the MatchEvaluator delegate.
      MatchEvaluator myEvaluator = new MatchEvaluator(c.ReplaceNums);
      // Replace matched characters using the delegate method.
      sInput = r.Replace(sInput, myEvaluator);
      // Write out the modified string.
      Console.WriteLine(sInput);
   }
   public string ReplaceNums(Match m)
   // Replace each Regex match with match + " "
   {
      return m.ToString()+" ";
   }
}

怎么样?

我已经很久没有使用C#了,我不能测试,但如果你只需要一次,它可能会"更整洁":

sInput = Regex("[0-9][0-9][0-9]").Replace(sInput,MatchEvaluator(Match m => m.ToString()+" "));

除非先解析字符串,否则无法执行您想要的操作。

根据你的评论,你只需要一个简单的格式,所以你最好只实现一个小的helper方法,仅此而已

我会选择类似的东西:

 public static string Group(this string s, int groupSize = 3, char groupSeparator = ' ')
 {
     var formattedIdentifierBuilder = new StringBuilder();
     for (int i = 0; i < s.Length; i++)
     {
         if (i != 0 && (s.Length - i) % groupSize == 0)
         {
             formattedIdentifierBuilder.Append(groupSeparator);
         }
         formattedIdentifierBuilder.Append(s[i]);
     }
     return formattedIdentifierBuilder.ToString();
 }

EDIT:通用分组大小和组分隔符。

问题是#数字占位符,它仅适用于数字格式。因此,你不能在字符串上使用这个。

将字符串解析为数字,以便应用格式规则,或者使用其他方法将字符串一分为二。

string.Format("{0:### ###}", int.Parse("123456"));