【问题标题】:C# get character after a character from a string [closed]C#从字符串中获取字符后的字符[关闭]
【发布时间】:2014-02-05 17:53:54
【问题描述】:
string dex = "ab43kjh43434v34b";

如何从上面的字符串中将每个第二个字符转换为另一个字符串? 例如:

string dex1 = "b3j4443b";

【问题讨论】:

  • 您为解决这个问题做了什么尝试?您在自己尝试的解决方案中遇到了哪些问题?
  • 我试图拆分字符串但我不能
  • 为什么需要这个
  • 我正在做一个项目,我的项目中需要这个功能
  • 你们否决了我的问题是不公平的,因为我只是在问这个问题,我真的需要它。

标签: c# string char


【解决方案1】:
string dex = "ab43kjh43434v34b";
var dex1 = String.Join("", dex.Where((c,i) => i % 2 == 1));

【讨论】:

  • 你为什么不使用索引Where 来代替?
  • 您可以简单地使用为谓词提供项目索引的Where 的重载,而不是改变外部变量并依赖其副作用。此外,您可以使用Concat,而不是使用带有空白分隔符的Join,因为它在概念上都代表了您正在执行的操作(您正在连接项目,而不是使用分隔符连接它们)并且略微改进性能。
  • 如果我们很聪明,为什么不直接使用dex.Where(c => ++i % 2 == 0) 而不是加入空字符串。
  • @PrestonGuillot 因为它不返回字符串。
  • @It'sNotALie。你是对的。
【解决方案2】:

正则表达式也可以:

string EveryOtherCharacter( string s , int modulo2 )
{
  string value = Regex.Replace( s , "." , m => m.Index & 1 == 1 ? m.Value : "" )) ;
  return value ;
}

尽管我认为,您会发现避免类似 LINQ 的聪明才智并坚持简单会产生最大的效率。这是简单明了的通用版本:

string SelectEveryNthCharFromString( string s, int n , int r )
{
  if ( s == null ) throw new ArgumentNullException("s") ;
  if ( n < 1 ) throw new ArgumentOutOfRangeException("n") ;
  if ( r < 0 || r > n-1 ) throw new ArgumentOutOfRangeException("r") ;

  StringBuilder buffer = new StringBuilder( 1 + s.Length / n ) ;

  for ( int i = 0 ; i < s.Length ; ++i )
  {
    if ( i % n != r ) continue ;
    buffer.Append(s[i]) ;
  }

  return buffer.ToString() ;
}

【讨论】:

  • 投反对票?真的吗?任何解释——我对这里的理由很感兴趣。
【解决方案3】:
StringBuilder result = new StringBuilder();

for (int i = 0; i <= dex.Length; i++)
{
    if (i % 2 != 0) continue;
    result.Append(dex[i]);
}

【讨论】:

  • 考虑使用StringBuilder,而不是反复重新创建一个新字符串。
  • @C.Evenhuis 当然,编辑了我的答案。
  • @Guilherme 你在 result.Append 中不需要.ToString()
  • 你拼错了Length
  • 仍然拼错了Length
【解决方案4】:

您可以将字符串视为字符数组,例如 dex[0] 在您的示例中将为您提供 a。也就是说,一个 for(each) 循环和 Length 属性应该足以解决您的问题。

【讨论】:

  • 是的,这也是一个好主意,感谢 C.Evenhuis。
  • 我想知道我是否因为没有提供可复制粘贴的答案而被否决:)
  • 已为您修复。您提供的答案与 O.P. 提供的尝试解决方案一样多 B^)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 1970-01-01
  • 2011-10-05
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多