【问题标题】:Find and replace ASCII character with a new line查找并用新行替换 ASCII 字符
【发布时间】:2012-05-24 18:50:37
【问题描述】:

我正在尝试查找字符串中出现的每个 ASCII 字符并将其替换为新行。这是我目前所拥有的:

public string parseText(string inTxt)
{
    //String builder based on the string passed into the method
    StringBuilder n = new StringBuilder(inTxt);
    //Convert the ASCII character we're looking for to a string
    string replaceMe = char.ConvertFromUtf32(187);
    //Replace all occurences of string with a new line
    n.Replace(replaceMe, Environment.NewLine);
    //Convert our StringBuilder to a string and output it
    return n.ToString();
}

这不会添加新行,并且字符串都保留在一行上。我不确定这里有什么问题。我也试过了,但结果一样:

n.Replace(replaceMe, "\n");

有什么建议吗?

【问题讨论】:

  • 我们也“不确定问题出在哪里”。因为你没有告诉我们。
  • 什么问题?和什么结果一样?
  • 它没有按照我说的去做......

标签: c# .net string replace


【解决方案1】:

char.ConvertFromUtf32 虽然是正确的,但并不是根据 ASCII 数值读取字符的最简单方法。 (ConvertFromUtf32 主要用于位于 BMP 之外的 Unicode 代码点,这会导致代理对。这不是您在英语或大多数现代语言中遇到的。)相反,您应该使用 (char) 进行转换.

char c = (char)187;
string replaceMe = c.ToString();

当然,您可以在代码中将所需字符的字符串定义为文字:"»"

您的Replace 将被简化为:

n.Replace("»", "\n");

最后,在技术层面上,ASCII 仅涵盖值在 0-127 范围内的字符。字符 187 不是 ASCII;但是,它对应于 ISO 8859-1、Windows-1252、 Unicode 中的»,这些都是迄今为止最流行的编码。

编辑:我刚刚测试了您的原始代码,发现它确实有效。您确定结果保留在一行上吗?调试器在单行视图中呈现字符串的方式可能存在问题:

请注意,\r\n 序列实际上 do 表示换行符,尽管显示为文字。您可以从多行显示中检查这一点(通过单击放大镜):

【讨论】:

  • 感谢您的回答!您的代码运行良好,但文本没有显示在新行上,尽管这可能是我正在使用的库的限制(文本正在使用 iTextSharp 写入 PDF 文件)。
  • @AndrewDeForest:是的,这肯定与您使用字符串的方式有关;即使你原来的方法的结果是正确的。 iTextSharp 很可能有一种引入换行符的特定方式——类似于 HTML 中的 <br> 节点——因此你不能假设它会识别/尊重 .NET 换行符。如果您使用用于生成 PDF 的代码的 sn-p 打开问题,您可能会获得一些有关如何将字符串换行符转换为 iTextSharp 结构的帮助。
【解决方案2】:

StringBuilder.Replace 返回一个新的 StringBuilder 并包含所做的更改。奇怪,我知道,但这应该可行:

StringBuilder replaced = n.Replace(replaceMe, Environment.NewLine);

return replaced.ToString();

【讨论】:

  • @banging StringBuilder的replace方法返回的是对实例的引用,而不是新的实例。
  • MyItchyChin:考虑到 everything(除了原语)是 c# 中的引用,为什么区分很重要?我的意思是这是一个参考。
猜你喜欢
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多