【问题标题】:getting an index of a character获取字符的索引
【发布时间】:2011-11-18 17:05:59
【问题描述】:

我在获取字符串的字符“-”的索引时遇到问题。让我解释一下我的问题。 首先,我必须从文本文件中读取一行。文本文件中唯一的一行是“Beta = 62.5 * (Sigma – Delta) / 125”

StreamReader rdr = new StreamReader(openPath, Encoding.Default); 

while (rdr.Peek() != -1)
{
     string strInput = rdr.ReadLine();
}

那么我需要获取 char '-' 的索引。

int col = strInput.IndexOf('-');

在上述行之后,'col' 等于 -1。但正如您所见,“-”字符位于上述从文本文件中读取的字符串中。 我无法弄清楚为什么我将 -1 作为“-”的索引。帮帮我……

【问题讨论】:

  • 看起来在您的文件中您有一个破折号而不是一个“-”字符。这是2个不同的角色。你能确认一下吗?
  • 从您的文本文件中复制 - 并将其粘贴到您的代码中,然后重试。此外,在IndexOf 行上放置一个断点并检查strInput 的值。

标签: c#


【解决方案1】:

这两个字符不一样。看看它们的长度:

(这称为en-dash,等于ASCII字符N的宽度)

-

(这是一个正常的 ascii 连字符,或减号)

修改您的 indexof 以使用破折号 (–) 而不是连字符 (-),您应该会得到正确的结果。

编辑:感谢六字母变量的正确术语

【讨论】:

  • 第一个被称为 em 破折号,而第二个被称为 en 破折号。它们之所以如此命名,是因为它们的宽度分别等于大写字母 M 和 N(尽管通常长破折号是长破折号宽度的一半)。如果您解决填字游戏,您对 ems 和 ens 并不陌生。
  • 实际上,一个破折号看起来像-,而他的字符串包含-(破折号?),他正在搜索-。这让人困惑。
  • @AndreasCarlbom:你好 font-magic,你是对的,所以我重申一下:第一个是 en 破折号,第二个是连字符。如果他在那里得到数字破折号,上帝帮助我们......
【解决方案2】:

你搜索的不是同一个字符,你要搜索的字符应该是'–'而不是'-'

试试他的台词:

int col = a.IndexOf('–');

【讨论】:

  • 我在半路上输入了完全相同的答案 :) +1
【解决方案3】:

在您的代码中添加(临时)一行,就在 int col = strInput.IndexOf('-'); 之前:

System.Diagnostics.Debug.Assert(String.Equals(strInput, "Beta = 62.5 * (Sigma – Delta) / 125");

【讨论】:

    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2012-06-29
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2015-01-25
    • 2017-07-28
    相关资源
    最近更新 更多